1

open() を使用してファイルを作成したい。

ここに私のコードの一部があります:

int fd = open("testing", O_EXCL | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
    if(fd == -1){
        perror("Error");
        return 1; }

出力は、「testing」という名前のファイルが作成され、ユーザー、グループ、およびその他の読み取り、書き込み、および実行のアクセス許可が付与されている必要があります。

しかし、私が得るのは、この権限を持つ「testing」という名前のファイルです:

-rwxr-xr-x

グループとその他の書き込み権限がありません。

私も使ってみました

S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH |S_IXOTH)

しかし、それでも同じ結果が得られます。

どうすればこの問題を解決できますか?

4

1 に答える 1

2

アクセス許可は、プロセスの umask によって変更されます。有効な権限は(mode & ~umask).

を使用して、ファイルの作成後にパーミッションを変更する必要がありますfchmod()。を使用し、基になるファイルがと の間の他の i ノードを指すように変更されたfchmod()場合に発生する可能性のある競合状態を回避します(TOCTOU 競合の場合は google)。chmod()open()chmod()

于 2012-12-02T10:24:38.827 に答える