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)
。