closedir()导致核心转储

时间:2010-01-19 11:36:15

标签: c core closedir

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

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

3 个答案:

答案 0 :(得分:3)

closedir() takes a DIR *,而不是char *。希望closedir()这样做不会起作用。尝试:

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

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

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

答案 1 :(得分:2)

MyDir必须是const char*才能成为opendir的参数。

您需要opendir结果传递给closedir - 您不能只是投射路径!

const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
    closedir(directory);
    exit(0);
}

答案 2 :(得分: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