1

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: -
4

3 に答える 3

0

もう 1 つの問題は、readdir を 2 回呼び出していることです。1 回は while () コンストラクトで、もう 1 回はその後です。隠しディレクトリのデータを報告しています。と ...

于 2013-11-01T01:20:20.117 に答える