[英]set the execute bits in C
我正在編寫一個程序,要求我使用標准的fopen fprintf fclose
調用來創建文件。
我想設置執行位。
我可以用chmod
來做到這一點,但這似乎有些過分。 在我的一生中(可能是由於高齡),我似乎找不到(或記住)執行此操作的API。
chmod (2)
是 API調用,是從程序更改文件模式(按名稱引用)的規范方法; 這不是矯kill過正。
您可以使用fchmod(請參閱fchmod(3)),或者如果要對創建的每個文件應用fmask,請使用umask(以下摘錄取自http://www.gnu.org/software/libc/manual/html_node/Setting- Permissions.html和umask(2)手冊頁 ):
本節中的函數在sys / stat.h中聲明。
函數:mode_t umask(mode_t掩碼)
umask函數將當前進程的文件創建掩碼設置為mask,並返回文件創建掩碼的先前值。
Here is an example showing how to read the mask with umask without changing it permanently:
mode_t
read_umask (void)
{
mode_t mask = umask (0);
umask (mask);
return mask;
}
However, on GNU/Hurd systems it is better to use getumask if you just want to read the mask value, because it is reentrant.
umask-設置文件模式創建掩碼
mode_t umask(mode_t mask);
umask()將調用過程的文件模式創建掩碼(umask)設置為mask&0777(即,僅使用mask的文件許可權位),並返回mask的先前值。
Open(2),mkdir(2)和其他創建文件的系統調用使用umask來修改對新創建的文件或目錄的權限。 具體來說,umask中的權限已從mode參數禁用為open(2)和mkdir(2)。
stat(2)下描述了用於指定掩碼的常量。
進程umask的典型默認值為S_IWGRP |。 S_IWOTH(八進制022)。 在通常情況下,將open(2)的mode參數指定為:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
(八進制0666)創建新文件時,對結果文件的權限為:
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
(因為0666&〜022 = 0644;即rw-r--r--)。 返回值此系統調用總是成功,並且返回掩碼的前一個值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.