fcntl.h содержит не все константы флагов состояния
Я просматривал заголовочные файлы и не смог найти ни одного файла с определениями флагов состояния (например, O_RDONLY).
Спасибо Джон
1 ответ
Резюме
Если вы используете Linux, он должен быть в /usr/include/bits/fcntl.h
,
#define O_RDONLY 00
Вы можете найти это используя rgrep
, или же ctags
а также Vim
, или же cpp
, или же cwhere
,
rgrep
Самый простой способ - это использовать rgrep
ака grep -R
,
$ rgrep O_WRONLY .
./X11/Xw32defs.h:# define O_WRONLY _O_WRONLY
./linux/fs.h: * to O_WRONLY and O_RDWR via the strange trick in __dentry_open()
./linux/smbno.h:#define SMB_O_WRONLY 0x0001
./asm-generic/fcntl.h:#define O_WRONLY 00000001
./security/_pam_macros.h: if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_NOFOLLOW|O_APPEND)) != -1) {
./security/_pam_macros.h: if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_APPEND)) != -1) {
./security/_pam_macros.h: if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_NOFOLLOW|O_APPEND)) != -1) {
./security/_pam_macros.h: if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_APPEND)) != -1) {
./bits/fcntl.h:#define O_WRONLY 01
Ctags
Или вы могли бы бежать ctags -R
в /usr/include
а потом беги vim -t O_WRONLY
,
Или, немного лучше, но больше печатать:
find . /usr/include -name "*.h" |
ctags -f - -L - |
grep "^O_WRONLY " |
cut -d " " -f 1,2,3 |
sed -e 's# /\^# #;s#\$/\;"$##'
CPP
Лучший способ, который я нашел, это использование cpp
,
Предполагая, что у вас есть исходный файл с именем YOUR_SOURCE_FILE с необходимым #include
s, попробуйте запустить:
cpp -dD YOUR_SOURCE_FILE | less
Тогда ищи свой #define
например, /O_WRONLY
, затем прокрутите вверх, чтобы найти первое имя файла над ним. В этом случае:
# 27 "/usr/include/bits/fcntl.h" 2 3 4
Значит это O_WRONLY
подбирается из /usr/include/bits/fcntl.h
если вы включите три заголовочных файла, упомянутых в man fcntl
,
cwhere
У меня есть скрипт cwhere
автоматизировать бег cpp
:
$ cwhere O_WRONLY sys/types.h sys/stat.h fcntl.h
/usr/include/bits/fcntl.h: #define O_WRONLY 01
Если desc
установлен, вы можете просто ввести имя функции, которая использует #define
например,
$ cwhere O_WRONLY 'fcntl()'
/usr/include/bits/fcntl.h: #define O_WRONLY 01