如何解释 /proc/PID/fdinfo/N 中的八进制标志

如何解释 /proc/PID/fdinfo/N 中的八进制标志

联机procps帮助页指出,flagsfiles in 中的字段/proc/PID/fdinfo/是一个八进制数,指示文件访问模式和文件状态标志。联机帮助页给出了各种标志( 、等)open的解释,但没有相应的八进制值。这些八进制值是否在任何地方列出,或者我是否必须搜索 Linux 源代码? (如果是的话那么在哪里?)。O_APPENDO_ASYNC

答案1

我不知道文档列出了标志常量的值,但您不需要搜索源代码甚至头文件,您可以询问编译器:

echo O_APPEND | gcc -include fcntl.h -E -

遍历所有标志open(2)在 x86-64 Linux 上:

$ for flag in APPEND ASYNC CLOEXEC CREAT DIRECT DIRECTORY DSYNC EXCL LARGEFILE NOATIME NOCTTY NOFOLLOW NONBLOCK PATH SYNC TMPFILE TRUNC; do printf '%s: ' O_$flag; echo O_$flag | gcc -D_GNU_SOURCE -include fcntl.h -E - | tail -n 1; done
旗帜 价值
O_APPEND 02000
O_ASYNC 020000
O_CLOEXEC 02000000
O_CREAT 0100
O_DIRECT 040000
O_DIRECTORY 0200000
O_DSYNC 010000
O_EXCL 0200
O_LARGEFILE 0
O_NOATIME 01000000
O_NOCTTY 0400
O_NOFOLLOW 0400000
O_NONBLOCK 04000
O_PATH 010000000
O_SYNC 04010000
O_TMPFILE (020000000 | 0200000)
O_TRUNC 01000

(其中一些是特定于体系结构的;例如O_LARGEFILEi386 上的 0100000。)

相关内容