【问题标题】:changing file permissions of default mkstemp更改默认 mkstemp 的文件权限
【发布时间】:2014-10-05 04:37:04
【问题描述】:

我在 C 中调用以下代码:

 fileCreatefd = mkstemp(fileName);

我看到该文件是使用权限 600 (-rw-------) 创建的。我想将此临时文件创建为 -rw-rw-rw-

我尝试过使用 umask,但这只对文件权限应用了掩码——至少这是我的理解。那么如何创建权限为 666 的文件呢?

谢谢

【问题讨论】:

    标签: c file ubuntu-12.04 umask mkstemp


    【解决方案1】:

    你不能用 mkstemp 创建它 0666。如果这对您的应用程序来说足够的话,您可以在之后使用 fchmod 更改权限。

    fileCreatefd = mkstemp(fileName);
    fchmod(fileCreatefd, 0666)
    

    【讨论】:

    • 谢谢。这行得通。不过我很好奇。为什么我不能用 0666 创建一个文件。是因为 gcc 编译器发布 2.0.7 不允许我吗?我使用 4.6.3 顺便说一句
    • POSIX 指定 mkstemp 应该创建一个文件 0600; glibc(不是 gcc)从 2.0.7 开始实现这种行为。目的是在程序需要临时文件的地方使用 mkstemp,并且临时文件不希望与其他用户共享/通信,因此 POSIX 指定默认私有权限。
    【解决方案2】:

    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更改文件权限。

    【讨论】:

      猜你喜欢
      • 2012-09-10
      • 2013-01-07
      • 2021-09-18
      • 2012-11-02
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多