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

umask : 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 に答える