ubuntu - 将权限设置为777,结果文件为775

标签 ubuntu file-permissions

我正在尝试将字符串写入文件,并将文件的权限设置为 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;
    }
}

最佳答案

您有两个问题:

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

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

关于ubuntu - 将权限设置为777,结果文件为775,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357616/

相关文章:

c++ - Visual Studio 代码重构似乎不起作用(例如重命名符号 - f2)

ubuntu-14.04 - Lubuntu 禁用 [alt] + 拖动移动窗口

c++ - 在远程 linux 上启动调试 session 时 SDL 驱动程序失败

file-permissions - 同步文件权限*仅限*

git - 如何在不修改 .git/index 的情况下运行 git status - 例如在 PROMPT_COMMAND 中

c# - 在 Ubuntu 上禁用证书验证

ubuntu - .Net Core 获取并发连接数

android - 如何允许 TTS 将文件写入我的应用程序目录?

c - C语言获取文件权限

linux - Linux 上的 Netbeans 8 忽略了 umask