K&R 2 (8.6 例 - ディレクトリの一覧表示)の例を見ていました。これは、Linux コマンドls
または Windows のdir
. この例は、 、 などの関数の実装を示していopendir
ますreaddir
。コードを単語ごとに入力しようとしましたが、まだ機能しません。実行することは、(現在のディレクトリの) ドットを出力して終了することだけです。
コード ( の実装readdir
) で見つけた興味深い点の 1 つは、システム コール likeopen
およびread
on ディレクトリを呼び出していたことです。何かのようなもの -
int fd, n;
char buf[1000], *bufp;
bufp = buf;
fd = open("dirname", O_RDONLY, 0);
n = read(fd, bufp, 1000);
write(fd, bufp, n);
このコードを実行すると、フォルダー名"dirname"
にファイルが含まれていても出力が得られません。
また、この本には、実装はバージョン 7 および System V UNIX システム用であると書かれています。それがLinuxで動作しない理由ですか?
コードはhttp://ideone.com/tw8ouXです。
read
では、Linux はディレクトリに対するシステム コールを許可していないのでしょうか? それとも他の何かがこれを引き起こしていますか?