closedir () вызывая сброс ядра - PullRequest
0 голосов
/ 19 января 2010

У меня есть строки ниже в моем коде, написанном на C на платформе Unix. Пожалуйста, дайте мне знать, почему я получаю дамп ядра в функции closedir (). Я мог успешно открыть каталог, указанный путем.

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

Ответы [ 3 ]

3 голосов
/ 19 января 2010

closedir() занимает DIR *, а не char *.Желая closedir() сделал это не сработает.Попробуйте:

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

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

Также кажется, что вы добавили приведение в (DIR *) MyDir для подавления предупреждения компилятора.Когда компилятор выдает предупреждение, вы должны выяснить, почему он это делает.Подавлять предупреждение вряд ли правильно.

2 голосов
/ 19 января 2010

MyDir должен быть const char*, чтобы быть аргументом для opendir.

Вам необходим результат из opendir, чтобы перейти к closedir - вы можетене просто проложить путь!

const char* MyDir = "/";
DIR* directory = opendir(MyDir);
if (directory != NULL)
{
    closedir(directory);
    exit(0);
}
0 голосов
/ 19 января 2010

Тип ввода неверен. Для справки:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...