umask() システムコールを使用して権限をブロックする方法

umask() システムコールを使用して権限をブロックする方法

umask()ファイル権限を設定するためにシステムコールを使用しています。次のコードを使用しています。

umask(S_IWGRP | S_IWOTH);
printf("Enter file name that you want to create:");
scanf(" %s",file);
fd = open(file,O_CREAT|O_WRONLY);

ただし、実行後は以下の権限でファイルが生成されます。

--wS-----T 1 rvi rvi     0 Oct  2 15:20 test.txt

Sこの小さなことは何のTためですか?なぜ自動的に修正されますか?

答え1

O_CREATでopenを呼び出すには、ファイルモードを表す3番目のパラメータが必要です。その後、umaskは要求されたモードでマスクされます。たとえば、次のようになります。

umask(S_IWGRP | S_IWOTH /* == 0022 */);
fd = open(file, O_CREAT|O_WRONLY, 0777);

フラグ 0777 &(~0022) = 0755、つまり rwxr-xr-x を使用してファイルを生成します。

umask(S_IWGRP | S_IWOTH);
fd = open(file, O_CREAT|O_WRONLY, 0666);

フラグ0666&(〜0022)= 0644(rw-r--r--)を使用してファイルが生成されます。あなたの場合、モード引数を提供しないので、open関数はスタックからランダムなデータを取得するので、umaskでマスクされたビットがオフになることがわかります。希望のモードで公開通話を提供してみてください。 0777は実行ファイルに適しており、0666は非実行ファイルに適しています。

関連情報