1

好的,所以我遇到了一些问题。这是我的代码(在此之前调用的 opendir() ):

while( (dp = readdir(dfd)) != NULL ) {
        if( strcmp(dp->d_name, ".") == 0 ||  strcmp(dp->d_name, "..") == 0)
            continue;

        lstat(dp->d_name, &stbuf);

        printf("%s: ", dp->d_name);

        if( S_ISDIR(stbuf.st_mode) )
            puts("Directory");
        else if ( S_ISREG(stbuf.st_mode) )
            puts("File");
        else if ( S_ISCHR(stbuf.st_mode) )
            puts("Character Device");
        else if ( S_ISBLK(stbuf.st_mode) )
            puts("Block Device");
        else if ( S_ISFIFO(stbuf.st_mode) )
            puts("Fifo");
        else if ( S_ISLNK(stbuf.st_mode) )
            puts("Link");
        else
            puts("Socket");
    }
    return;
}

我正在阅读一个目录并确定里面的文件类型。唯一的问题是这将始终打印“目录”,我相信这与对 lstat 的调用有关。我不确定如何适当地更改它。

4

2 回答 2

4
lstat(dp->d_name, &stbuf);

事情只dp->d_name包含文件的名称,而不是完整路径。所以它可能会失败,但你不会注意到,因为你没有测试它的返回值。

您需要预先添加目录的路径(即,您传递给的路径opendir)。

于 2012-07-02T16:09:19.493 回答
3

我可以看到两个明显的担忧原因:

  1. 你没有建立正确的路径。除非你目录中(即你做了opendir(".")),否则你将错误的路径传递给lstat(). 您需要将目录名称与每个文件的名称连接起来。打开目录并不意味着将其设为当前目录。
  2. lstat()在检查其返回值之前,您没有检查是否成功。
于 2012-07-02T16:10:07.143 回答