如何检查当前正在运行的程序的umask?
[更新:另一个流程,而不是当前流程.]
您可以将gdb附加到正在运行的进程,然后在调试器中调用umask:
(gdb) call umask(0) [Switching to Thread -1217489200 (LWP 11037)] $1 = 18 (gdb) call umask(18) $2 = 0 (gdb)
(注意:18 = O22)
这表明使用ptrace获取umask可能有一种非常丑陋的方式.
从GNU C Library手册:
下面是一个示例,说明如何在
umask
不更改永久更改掩码的情况下读取掩码:mode_t read_umask (void) { mode_t mask = umask (0); umask (mask); return mask; }但是,
getumask
如果您只想读取掩码值,最好使用它,因为它是可重入的(至少如果您使用GNU操作系统).
getumask
但是,它是特定于glibc的.因此,如果您重视可移植性,那么不可重入的解决方案就是唯一的解决方案.
编辑:我刚刚->umask
通过Linux源代码获取了所有内容.无处可以获得不同过程的umask.也没有getumask
; 显然这只是赫德的事情.