Согласно 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);
}