0

我在 unix 平台上用 C 编写的代码中有以下几行。请让我知道为什么我将核心转储到 closedir() 函数中。我可以成功打开路径指定的目录。

    if (opendir(MyDir) != NULL )
    {
    closedir((DIR *) MyDir);
        exit 0;
    }
4

3 回答 3

3

closedir() 需要 aDIR *,而不是char *. 希望closedir()这样做是行不通的。尝试:

#include <sys/types.h>
#include <dirent.h>

DIR *dir;
if ((dir = opendir(MyDir)) != NULL)
    closedir(dir);

此外,您似乎添加了一个强制(DIR *) MyDir转换来抑制编译器警告。当编译器给你一个警告时,你应该找出它为什么这样做。压制警告几乎不是正确的做法。

于 2010-01-19T11:40:14.230 回答
2

MyDir必须是 aconst char*才能成为 的论据opendir

您需要将结果传递opendirclosedir- 您不能只是投射路径!

const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
    closedir(directory);
    exit(0);
}
于 2010-01-19T11:41:09.500 回答
0

类型转换不正确。以供参考:

opendir需要一个目录名 (char*) 作为参数并返回一个目录流 (DIR*):

DIR* opendir(const char* name)

closedir需要一个目录流 (DIR*) 作为参数并返回一个 int (成功时为 0):

int closedir(DIR* stream)

所以你的代码应该是这样的:

const char* dirname;
DIR* mydir;

mydir = opendir(dirname);
if(mydir != NULL) {
   closedir(mydir);
   exit(0);
}

另见:http ://sunsson.iptime.org/susv3/functions/readdir.html

于 2010-01-19T11:42:50.967 回答