Cで stat 構造体の処理を抽象化する次の関数があります
int isdir(const char *filename) {
struct stat st_buf;
stat(filename, &st_buf);
if(S_ISDIR(st_buf.st_mode))
return 0;
return 1;
}
そしてメイン関数の呼び出しisdir
int main(...) {
struct dirent *file;
DIR *dir = opendir(argv[1]);
while(file = readdir(dir)) {
printf("%d\n", isdir(file->d_name));
}
closedir(dir);
/* other code */
}
プログラムのパラメーターとして Test というフォルダーがあり、2 つのファイル内に、「archivo」という通常のファイルと「carpeta」というフォルダーがあります。私のプログラムは、ファイルとフォルダーから 1 と 1 を出力しますが、それは 0 と 1 でなければなりません。エラーの場所がわかりません。
ターミナルで実行された stat 関数は、ファイルとフォルダーの出力を提供します。
Fichero: «archivo»
Tamaño: 0 Bloques: 0 Bloque E/S: 4096 fichero regular
Dispositivo: 805h/2053d Nodo-i: 3159580 Enlaces: 1
Acceso: (0664/-rw-rw-r--) Uid: ( 1000/alejandro) Gid: ( 1000/alejandro)
Acceso: 2013-10-31 21:08:57.556446728 -0300
Modificación: 2013-10-31 21:08:57.556446728 -0300
Cambio: 2013-10-31 21:08:57.556446728 -0300
Creación: -
Fichero: «carpeta/»
Tamaño: 4096 Bloques: 8 Bloque E/S: 4096 directorio
Dispositivo: 805h/2053d Nodo-i: 3147783 Enlaces: 2
Acceso: (0775/drwxrwxr-x) Uid: ( 1000/alejandro) Gid: ( 1000/alejandro)
Acceso: 2013-10-31 21:19:11.728526599 -0300
Modificación: 2013-10-31 21:19:20.867833586 -0300
Cambio: 2013-10-31 21:19:20.867833586 -0300
Creación: -