マニュアルページによるとfclose(3):
戻り値
正常に完了すると 0 が返されます。それ以外の場合は
EOFが返され、エラーを示すためにグローバル変数errnoが設定されます。どちらの場合でもfclose()、ストリームへのさらなるアクセス ( への別の呼び出しを含む) は、未定義の動作を引き起こします。エラー
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);
}