2011-02-26 7 views

答えて

2

概要

あなたがLinux上でなら、それは/usr/include/bits/fcntl.hにする必要があります。

#define O_RDONLY 00 

あなたはrgrep、またはctagsVim、またはcpp、またはcwhereを使用してそれを見つけることができます。


rgrep

最も簡単な方法は、rgrepgrep -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の

それとも、あなたは/usr/includectags -Rを実行し、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を使用しています。

cpp -dD YOUR_SOURCE_FILE | less 

その後、あなたの#defineを検索し、例えば:実行してみて、あなたが必要な#include sのYOUR_SOURCE_FILEと呼ばれるソースファイルを持っていると仮定すると

/O_WRONLY、上にスクロールして上にある最初のファイル名を見つけます。この場合:

# 27 "/usr/include/bits/fcntl.h" 2 3 4 

あなたはman fcntlで述べた3つのヘッダファイルを含める場合O_WRONLY/usr/include/bits/fcntl.hからピックアップされていることを意味します。


cwhere

私はcppを実行している自動化するcwhereというスクリプトいる:descがインストールされている場合、あなただけの名前を

$ cwhere O_WRONLY sys/types.h sys/stat.h fcntl.h 
/usr/include/bits/fcntl.h: #define O_WRONLY 01 

Download cwhere here

を入力することができますそれを使用する関数#define、例えば。拡張ファイルをチェック

$ cwhere O_WRONLY 'fcntl()' 
/usr/include/bits/fcntl.h: #define O_WRONLY 01 

Download desc here

+0

有用でした。 :) – John

+0

なぜ2つのfcntl.hファイルがあるのだろうか。 1つはusr/includeに、もう1つはusr/include/bitsにあります。 – John

+0

誰かがなぜアイデアを得ましたか? – John

関連する問題