CodeHighlight

2017年3月29日 星期三

[C/C++] fchmod/chmod

    最近遇到一個檔案權限的問題,是log檔要統一給獨立的module去抓。
因此除了寫檔案外,還需要給予合適的檔案權限。 想到檔案權限,第一個可以用的就是chmod - 經典的linux檔案變更API。
不過餵了狗之後,發現還有fchmod這個貨可以用。


chmod
基本上這東西和linux的chmod是一樣的,主要改變指定檔案的權限
宣告原型是 int chmod(const char *pathname, mode_t mode);
第一個參數是檔案名稱,第二個參數是mode
mode的設法和chmod相同,是以bitwise的方式指定三方的權限

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE *fp;
    fp = fopen("file.txt", "w");
    fputs("1234", fp);
    fclose(fp);
    chmod("file.txt", 0777);
    return 0;
}


fchmod
修改操作中的file number的檔案權限,相較於chmod,這個可以在打開檔案後就設定這個檔案的權限。
(雖然個人試過在開檔之後用chmod也是可以,只是不確定這樣的操作會有甚麼風險)
宣告原型為int fchmod(int fd, mode_t mode);
第一個參數是打開檔案的file descriptor,第二個則是mode
mode的設法和chmod相同。

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE *fp;
    fp = fopen("file.txt", "w");
    fchmod(fileno(fp), 0777);
    fputs("1234", fp);
    fclose(fp);
    return 0;
}

就個人來說,我會比較偏好用fchmod在開檔案前就把權限一併設好,
尤其在log檔這種即時性比較高的應用上,可以避免一些因為權限問題而抓不到log的狀況



Reference: