はじめに
「lsを読まずにプログラマを名乗るな!」を少し読みました。読んでみて標準ライブラリ関数に興味を持ちました。今回は標準ライブラリ関数のreaddir(3)
を使ってみたことを少し書きたいと思います。
実装
main.c
#include <dirent.h>
#include <stdlib.h> // NULLを利用するために
#include <stdio.h> // printfを利用するために
int main()
{
DIR *dirp;
struct dirent *dp;
dirp = opendir(".");
if (dirp == NULL)
return -1;
while (1) {
dp = readdir(dirp);
if (dp == NULL)
break;
// printf("%d\n", dp->d_namlen);
printf("%s\n", dp->d_name);
}
(void)closedir(dirp);
return 0;
}
// vim: set sw=2 sts=2 et :
ヘッダファイルはどこにあるか?
次のようなman
コマンドでヘッダファイルを調べることができます。
$ man 3 readdir
セクション番号として3
を指定することで、標準ライブラリを調べることができます。
まとめ
C言語でglobに既に同じような記事があります。こちらも併せて読むことで理解が深まると思います。
ファイルを読み込む実装は書籍で見かけることがありますが、カレントディレクトリにあるファイル名、ディレクトリ名を取得する実装は目新しく面白いと思いました。
スクリプト言語などではファイル名、ディレクトリ名を取得するようなオブジェクトが用意されていることが多いですが、そういうオブジェクトは標準ライブラリを利用しているのだろうか?という疑問が少し芽生えました。