30

現在実行中のプログラムの umask を確認するにはどうすればよいですか?

[更新: 現在のプロセスではなく、別のプロセス。]

4

5 に答える 5

27

実行中のプロセスに 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 を取得する非常に醜い方法がある可能性があることを示唆しています。

于 2008-10-03T04:46:39.717 に答える
8

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。どうやらそれはハードのみのものです。

于 2008-10-03T01:19:25.050 に答える
2

現在のプロセスである場合は、ファイルを /tmp に書き込み、その設定を確認できます。より良い解決策は、0 を渡して umask(3) を呼び出すことです。関数は呼び出し前の設定を返します。その後、その値を umask に戻してリセットします。

別のプロセスの umask は公開されていないようです。

于 2008-10-03T01:04:54.710 に答える