マニュアルページによると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);
}