因此除了寫檔案外,還需要給予合適的檔案權限。 想到檔案權限,第一個可以用的就是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: