系统调用 open() 似乎在创建文件时随机设置文件权限

System call open() seems to be setting file permissions randomly when creating a file

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

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

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

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

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