使用O_CREAT打开文件| O_RDWR将导致文件只能写入

时间:2016-06-03 17:38:09

标签: c linux

在我的c代码中,我使用open()选项O_CREAT|O_RDWR然后write()写信给afile:

    readfd = open("ak.bin", O_CREAT|O_RDWR);
    if (readfd >= 0) {
        res = write(readfd, key, 16);
        close(readfd);
    }

执行我的程序后,我发现文件"ak.bin"仅具有写入权限。我看不懂!

$ ls -l | grep ak
-----w---- 1 mohamed mohamed     16 Jun  3 18:30 ak.bin

我缺少什么?我希望我的文件也可以重新编写。

1 个答案:

答案 0 :(得分:2)

创建(O_CREAT)文件时,应指定模式

来自人open(2)

  

mode参数指定在新的时应用文件模式位   文件已创建。 必须在O_CREAT或时提供此参数   O_TMPFILE在标志中指定;如果既未指定O_CREAT也未指定O_TMPFILE,则忽略mode。该                 有效模式由通常的进程的umask修改                 方式:在没有默认ACL的情况下,创建模式                 文件是(mode& ~umask)。请注意,此模式仅适用于                 将来访问新创建的文件; open()调用                 创建只读文件可能会返回读/写                 文件描述符。