【发布时间】:2014-10-05 04:37:04
【问题描述】:
我在 C 中调用以下代码:
fileCreatefd = mkstemp(fileName);
我看到该文件是使用权限 600 (-rw-------) 创建的。我想将此临时文件创建为 -rw-rw-rw-
我尝试过使用 umask,但这只对文件权限应用了掩码——至少这是我的理解。那么如何创建权限为 666 的文件呢?
谢谢
【问题讨论】:
标签: c file ubuntu-12.04 umask mkstemp
我在 C 中调用以下代码:
fileCreatefd = mkstemp(fileName);
我看到该文件是使用权限 600 (-rw-------) 创建的。我想将此临时文件创建为 -rw-rw-rw-
我尝试过使用 umask,但这只对文件权限应用了掩码——至少这是我的理解。那么如何创建权限为 666 的文件呢?
谢谢
【问题讨论】:
标签: c file ubuntu-12.04 umask mkstemp
你不能用 mkstemp 创建它 0666。如果这对您的应用程序来说足够的话,您可以在之后使用 fchmod 更改权限。
fileCreatefd = mkstemp(fileName);
fchmod(fileCreatefd, 0666)
【讨论】:
mkstemp() 函数从模板生成唯一的临时文件名,创建并打开文件,并返回文件的打开文件描述符。
模板的最后六个字符必须是“XXXXXX”,这些字符被替换为使文件名唯一的字符串。由于会被修改,template不能是字符串常量,而应该声明为字符数组。
该文件是使用0600 权限创建的,即仅为所有者读写。 (In glibc versions 2.06 and earlier, the file is created with permissions 0666, that is, read and writefor all users.) 返回的文件描述符提供对文件的读写访问。使用open(2)O_EXCL 标志打开文件,保证调用者是创建文件的进程。
更一般地说,mkstemp() 的 POSIX 规范没有说明文件模式,因此应用程序应确保在调用 mkstemp()(和 mkostemp())之前正确设置其文件模式创建掩码 (umask(2)) )。
所以在创建文件后使用fchmod更改文件权限。
【讨论】: