Согласно man page fclose(3):
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения возвращается 0. В противном случае возвращается
EOF, и глобальная переменнаяerrnoустановлена для указания ошибки. В любом случае доступ (включая другой вызовfclose()) к потоку приводит к undefined.ОШИБКИ
EBADFНедопустимый дескриптор файла, лежащий в основеfp.Функция
fclose()также может выйти из строя и установитьerrnoдля любой из ошибок для подпрограммclose(2),write(2)илиfflush(3).
Конечно, fclose(NULL) должен потерпеть неудачу, но я ожидаю, что он вернется с errno, как правило, вместо того, чтобы умереть непосредственно по сегментации. Есть ли причина такого поведения?
Спасибо заранее.
ОБНОВЛЕНИЕ: я поставлю здесь свой код (особенно я пытаюсь strerror()).
FILE *not_exist = NULL;
not_exist = fopen("nonexist", "r");
if(not_exist == NULL){
printError(errno);
}
if(fclose(not_exist) == EOF){
printError(errno);
}