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

标签 c linux filesystems system system-calls

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

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

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

最佳答案

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

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

关于c - 系统调用 open() 似乎在创建文件时随机设置文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63782648/

相关文章:

c - GetLogicalDrives 和位位置 23

c - 如何用中断串口读取串口?

c - 在 doxygen 中记录 C 类型定义

php - 如何实现大批量的高性能批量图像转换?

c - 在 Linux 上用 C 将文件从服务器发送到客户端

Android 文件系统和 inode

c - 编译使用 C 语言的 WordNet 库的程序时出错

linux - 替换 Linux 调度器

javascript - Node.js 递归列出文件的完整路径

php - 使用 Symfony 2 Finder 组件获取子目录