Сводка
Если вы работаете в Linux, оно должно быть в /usr/include/bits/fcntl.h
.
#define O_RDONLY 00
Вы можете найти его, используя rgrep
, илиctags
и Vim
, или cpp
, или cwhere
.
rgrep
Самый простой способ - использовать rgrep
,aka 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
с, попробуйте выполнить:
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
Скачать описание здесь