1

使用 open syscall 写入和创建文件,文件没有属性。fedora16 gcc-4.6.3

#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    char *  str= "helloworld";
    int fd = open("test.db",O_WRONLY|O_CREAT|O_TRUNC|O_APPEND);

    write(fd,str,10);

    close(fd);
    return 0;
}

ll test.db

----------。1 jiamo jiamo 14 Apr 17 11:34 test.db

虽然它不会创建具有默认文件属性的文件,例如touch test.db

掩码:0002

如果删除 O_TRUNC int fd = open("test1.db",O_WRONLY|O_CREAT|O_APPEND) 文件属性是:

----rwx---。1 jiamo jiamo 14 Apr 17 12:29 test1.db

4

2 回答 2

3

将所需的权限添加到 open() 系统调用:

int fd = open("test.db",O_WRONLY|O_CREAT|O_TRUNC|O_APPEND, 0666);

从文档中:

mode must be specified when O_CREAT is in the flags, and is ignored otherwise.
The argument mode specifies the permissions to use in case a new file is created.
于 2012-04-17T04:28:51.757 回答
1

您需要将模式传递给open. 然后它也会设置权限。open是一个可变参数函数,您可以向它传递更多参数

int open(const char *path, int oflag, ... );

做类似的事情

open(LOCKFILE, O_WRONLY | O_CREAT | O_EXCL,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);

在此处检查各种权限位

于 2012-04-17T04:29:09.383 回答