Ошибка 'exit' was not declared in this scope"
Программа, которая выдает размер директории. Выдает ошибку в строчке exit (1). " 'exit' was not declared in this scope"
. В чем может быть ошибка?
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
main()
{
DIR *d;
struct dirent *de;
struct stat buf;
int exists;
int total_size;
d = opendir(".");
if (d == NULL) {
perror("prsize");
exit(1); // **ОШИБКА**
}
total_size = 0;
for (de = readdir(d); de != NULL; de = readdir(d)) {
exists = stat(de->d_name, &buf);
if (exists < 0) {
fprintf(stderr, "Couldn't stat %s\n", de->d_name);
} else {
total_size += buf.st_size;
}
}
closedir(d);
printf("%d\n", total_size);
}

Ответы - Ошибка 'exit' was not declared in this scope" / Ошибка 'exit' was not declared in this scope"

23.01.2018 02:25:01
Добавьте #include <stdlib.h>
Ошибка в том, что вы не пытаетесь посмотреть в каком заголовочном файле объявлена проблемная функция. Гугл в данном случае дает ответ быстрее, чем вы задаете вопрос.

24.01.2018 04:51:19
Насчёт гугла я не стал бы рекомендовать. За то, что там выдаст гугл - не отвечает никто. Но есть официальный источник информации - man система.
По первому вопросу. Смотрим man 3 exit. Там в третьей строке написано:
#include <stdlib.h>
И не надо ни у какого гугла спрашивать - там, зачастую,содержатся совершенно противоречивые советы. Подсказка: в команде man второй парамерт означает:
- Команда Shell
- Системный вызов (обращение к ядру ОС)
- Вызов функции из стандартной библиотеки.
По второму вопросу: "что вернёт stat() на каталог?". С точки зрения ФС наиболее распространённых типов (EXT3, EXT4), каталог - это самый обычный файл, в котором содержатся записи определённой структуры. Что бы понять, как отличить регулярный файл от каталога, опять таки смотрим man 2 stat. Там даже пример приведён:
stat(pathname, &sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* Handle regular file */
}
Ну и третий вопрос - про '.' и '..'. С точки зрения ФС это просто обозначения (синонимы) для реальных каталогов - текущего и родительского. Поэтому их обработка ничем не отличается от обработки каталогов, заданных явно.