readdir()とは

POSIXにはreaddir()というシステムコールがあり,
FUSEでファイルシステムを作るときにも登場します.
readdir()を簡単に説明しまます.

ファイルのopenとread

fopen()でファイルを開き,fread()でそのファイルから読み込むと,ファイルの中身(バイトデータ)が次々と得られます.

ディレクトリのopenとread

opendir()でディレクトを開き,readdir()でそのディレクトリから読み込むと,ディレクトリの中身(中のファイルやディレクトリ)が次々と得られます.

サンプル

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main(){
        DIR *dp;
        struct dirent *dent;

        if( (dp=opendir(".")) == NULL ){
                perror("dir cannot open.");
                exit(1);
        }
        while ((dent = readdir(dp)) != NULL){
                printf("%s\tinode %ld,\td_type %2d\n", dent->d_name, dent->d_fileno, dent->d_type);
        }
        closedir(dp);
        return 0;
}

まず,opendir() でディレクトリを開きます.
戻り値は,DIR型のポインタです.

戻り値のDIR型ポインタを引数に,readdir()を繰り返すと,
ディレクトリの中のファイル(やディレクトリ)が次々と得られます.
readdir()の戻り値は、dirent型のポインタです.

dirent型のデータの中には

d_fileno inode番号
d_type ファイル(など)の種類
d_namlen ファイル(など)の名前

などが含まれています.

この記事が気に入ったらサポートをしてみませんか?