或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。最近はスロット放浪記やってます。。

Hello,World!よりも重要なこと〜3 stdio.hってどこにある?

コマンドだったらwhichで探せるけど、ファイルを探す場合はどうする?となった場合の対処法。

stdio.hっていうのは、悪名高きおまじない。Cの勉強が進むころに、ヘッダや標準ライブラリの概念がわかって、後から納得することが多い。

実は、ヘッダのパスを検索する機会は多い。環境変数を設定する場合にもそうだし、ファイルの中身を見たい場合もそうだし。いや、そもそも、ファイル自体を検索する機会も多いかもしれない。

ファイル名を指定してfind

今回は、ルートディレクトリ配下を検索してみた。状況に応じて、カレントディレクトリを移動して実行すると良い。今回探したいのはあくまでstdio.h

$pwd
/
$find -name 'stdio.h'

ルートディレクトリにいるときに、 'stdio.h'を配下のディレクトリから探すという処理。ただ、これにはちょっと困ったことがある。ルートディレクトリ配下だから、権限の問題で検索をすることすら出来ない場合があって、エラーが出まくる。includeするファイルは権限がある場所に置かれているだろうから、そういうエラーログは無視したいところ。

そんな場合に便利なのが、/dev/null。標準エラー出力stderr(2)を/dev/nullにリダイレクトしてやれば、プロンプトには表示されない。

それを踏まえてコマンドを叩くと以下のような感じになる。

$find -name 'stdio.h' 2>/dev/null
./usr/lib/syslinux/com32/include/stdio.h
./usr/include/i386-linux-gnu/bits/stdio.h
./usr/include/stdio.h

実際にどのファイルにパスが通っているかは、環境変数などを調べてみること。

シェルについて理解を深めるなら、当書籍に勝るものなし。網羅的ではないが、概念を掴みやすい。