簡體   English   中英

在C中設置執行位

[英]set the execute bits in C

我正在編寫一個程序,要求我使用標准的fopen fprintf fclose調用來創建文件。

我想設置執行位。

我可以用chmod來做到這一點,但這似乎有些過分。 在我的一生中(可能是由於高齡),我似乎找不到(或記住)執行此操作的API。

fchmod(2)將與您的其他調用保持一致...給定fd文件描述符:

struct stat buf;
fstat(fd, &buf);
fchmod(fd, buf.st_mode | S_IXUSR | S_IXGRP | S_IXOTH);

會將所有三個執行位添加到文件的當前模式(作為練習的練習留給錯誤處理)。

您將使用fileno(3)FILE *結構中獲取文件描述符。 或者,您可以使用chmod(2)並將文件名傳遞給它。

chmod (2) API調用,是從程序更改文件模式(按名稱引用)的規范方法; 這不是矯kill過正。

您可以使用fchmod(請參閱fchmod(3)),或者如果要對創建的每個文件應用fmask,請使用umask(以下摘錄取自http://www.gnu.org/software/libc/manual/html_node/Setting- Permissions.htmlumask(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM