ファイルに書き込む場合、権限は書き込み専用です。

ファイルに書き込む場合、権限は書き込み専用です。

Cでファイルを開き、次のコードで書きます。

int fd = open("soandso.txt", O_RDWR | O_CREAT);
write(fd, buf_of_data, 3);

これで、ファイルには私にのみ書き込みアクセス権があります。これは私が開くで指定した権限ではありません。私は何が間違っていましたか?

ベストアンサー1

この値に応じてファイル作成権限が変更されますumask

たとえば、次のようになります。

$ umask
0022
$ touch xyz
$ ls -l xyz
-rw-r--r-- 1 sweh sweh 0 Sep 22 08:37 xyz

umask の値は標準に従います。読み書きモードなので、値は次のようになります。0022 削除 ----w--w-新しく作成されたファイルに対する権限。

私達はこれを変更できます:

$ umask 002
$ touch abc
$ ls -l abc
-rw-rw-r-- 1 sweh sweh 0 Sep 22 08:38 abc

これで002マスクのみが削除されました-------w-

ブロックされていないファイルの作成

$ umask 0
$ touch def
$ ls -l def
-rw-rw-rw- 1 sweh sweh 0 Sep 22 08:40 def

プログラムに値を無視させるには、呼び出す前に関数を明示的に呼び出す必要がumaskあります。umask(2)open(2)

open(2)フラグと共に使用する場合は、O_CREAT権限も渡す必要があります。モデル。例えば

open("myfile",O_CREAT|O_RDWR,0666);

この場合、スキーマフィールドも値によって変更されるため、umask生成される実際のスキーマはです(mode & ~umask)

おすすめ記事