現在実行中のプログラムの umask を確認するにはどうすればよいですか?
[更新: 現在のプロセスではなく、別のプロセス。]
実行中のプロセスに gdb をアタッチし、デバッガーで umask を呼び出すことができます。
(gdb) attach <your pid>
...
(gdb) call umask(0)
[Switching to Thread -1217489200 (LWP 11037)]
$1 = 18 # this is the umask
(gdb) call umask(18) # reset umask
$2 = 0
(gdb)
(注: 18 はO22
、この例の umask に対応します)
これは、ptrace を使用して umask を取得する非常に醜い方法がある可能性があることを示唆しています。
GNU C ライブラリのマニュアルから:
umask
永続的に変更せずにマスクを読み取る方法を示す例を次に示します。mode_t read_umask (void) { mode_t mask = umask (0); umask (mask); return mask; }
ただし、
getumask
再入可能であるため (少なくとも GNU オペレーティング システムを使用している場合)、マスク値を読み取るだけの場合は使用することをお勧めします。
getumask
ただし、glibc 固有です。したがって、移植性を重視する場合は、再入不可のソリューションしかありません。
->umask
編集: Linux のソース コード全体をgrep しました。別のプロセスの umask を取得できる場所はありません。また、ありませんgetumask
。どうやらそれはハードのみのものです。
現在のプロセスである場合は、ファイルを /tmp に書き込み、その設定を確認できます。より良い解決策は、0 を渡して umask(3) を呼び出すことです。関数は呼び出し前の設定を返します。その後、その値を umask に戻してリセットします。
別のプロセスの umask は公開されていないようです。