我有以下函数抽象了 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 的文件夹作为程序的参数,在两个文件中,一个是名为“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: -