【发布时间】:2014-01-03 03:48:29
【问题描述】:
我目前正在研究“Linux 编程接口”,在第 4 章中有一个练习,我们必须重写“tee”命令。我已经这样做了,但是无论我做什么,我的文件权限(保存在 mode_t 类型的变量中)都没有正确设置。
即,我有以下代码:
filePerms = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; // filePerms is mode_t
foutputFd = open((argc == 2) ? argv[1] : argv[2], flags, filePerms); // don't worry about the ternary here
if (foutputFd == -1)
errExit("opening file %s", (argc == 2) ? argv[1] : argv[2]); // ...or here.
说到底,目录中的文件将拥有rw-r--r--而不是上述标志指定的rw-rw-rw权限
现在,我做了一些研究,看起来传递给open() 的 mode 参数指定了允许的最大权限数,然后无论如何都会更改它(不知何故)。如果是这样,为什么会这样?为什么还要让我在公开调用中指定权限?
任何帮助都将不胜感激,我想继续阅读这本书,但这个问题有点令人沮丧,哈哈(我根本没有在书中找到解释)。
【问题讨论】:
-
见
umask。第 15.4.6 节 -
是的,每个人都说这是一个 umask 的东西,我很高兴稍后会在书中解释。谢谢。
标签: c linux file-permissions system-calls systems-programming