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は非実行ファイルに適しています。