【问题标题】:Setting permissions to 777, resulting file is 775将权限设置为 777,生成的文件为 775
【发布时间】:2015-06-04 03:24:09
【问题描述】:

我正在尝试将字符串写入文件,并将文件的权限设置为 777。生成的文件为空白,权限为 775。模式掩码似乎是正确的,当我使用 access() 检查时,它返回 0。我可以将文件 chmod 为 777(不使用 sudo)。怎么回事?

运行 ubuntu 14.10。硬盘是 ext3/4。

if (argc == 1) {
    int fd = open ("sampleFile", O_CREAT , S_IRWXU | S_IRWXG | S_IRWXO);
    int writ = 0xDEADBEEF;

    if (fd != -1) {
        char str [] = "My permission should be set to 777.";
        writ = write (fd, &str, (int)strlen (str));
        //writ = access ("sampleFile", W_OK);
        close (fd);

        printf ("(%o) %s\n", writ, str);
        return 0;
    }

    else {
        printf ("Couldn't make sampleFile in pwd.\n");
        return 1;
    }
}

【问题讨论】:

    标签: ubuntu file-permissions


    【解决方案1】:

    你有两个问题:

    1. write() 的第二个参数“必须包括以下访问模式之一:O_RDONLY、O_WRONLY 或O_RDWR”。将O_CREAT 更改为O_CREAT | O_WRONLY 以允许写入文件。

    2. 创建文件的模式由你的umask修改。你的umask 可能是002。 (umask 或 002 可防止您意外创建全局可写文件。)您可以在创建后使用 fchmod 更改权限。:
      fchmod(fd, S_IRWXU | S_IRWXG | S_IRWXO)

    【讨论】:

    • 1.那是我的粗心。我应该更仔细地阅读手册页。 2. 我不知道 umasks 是什么,但是在 man 上阅读并在我的终端中调用它后,它返回“0002”,正如你所怀疑的那样。我永远无法把它放在一起。非常感谢。
    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 2013-12-09
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2011-09-08
    相关资源
    最近更新 更多