【问题标题】:System call open() seems to be setting file permissions randomly when creating a file [duplicate]创建文件时,系统调用 open() 似乎正在随机设置文件权限 [重复]
【发布时间】:2020-12-26 04:11:53
【问题描述】:

我正在使用 open 系统调用以下列方式创建和打开文件:

fileID = open("aFile", O_CREAT|O_RDWR|O_TRUNC);

我希望创建具有读写权限的文件,有时确实如此,但只有当我运行ls -l 时,我只看到 w,或仅 r,或仅 x,或 ws,或 rwx 等. 如果我用系统调用运行我的程序 3 次,我每次可能会为 aFile 设置 3 个不同的文件权限。我不知道是什么导致了这个问题,因为它似乎是随机设置的。关于可能是什么原因的任何想法?

【问题讨论】:

  • 您使用的是网络驱动器吗?还是本地驱动器?
  • 您必须指定访问模式。 int open(const char *pathname, int flags, mode_t mode); "mode 参数指定创建新文件时应用的文件模式位。在标志中指定 O_CREAT 或 O_TMPFILE 时必须提供此参数;如果未指定 O_CREAT 或 O_TMPFILE,则忽略模式。"如果不指定模式,可能是随机值(未定义行为)。

标签: c linux filesystems system system-calls


【解决方案1】:

open() 采用第三个参数,该参数在创建文件时生效。该参数是一组修改新文件访问模式的标志。如果您不为此参数设置值,则将向open() 函数提供适用于该参数的寄存器或堆栈位置中的任何内容——取决于特定的系统和编译器。在任何情况下,它都不太可能是您想要的,并且会以不可预知的方式依赖于前面的代码。

在类 Unix 系统上,man 2 open 应该为您提供所有详细信息。

【讨论】:

    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2012-10-21
    • 2011-09-08
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多