小编Vdr*_*gon的帖子

为什么glibc的fclose(NULL)会导致分段错误而不是返回错误?

根据手册页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);
}
Run Code Online (Sandbox Code Playgroud)

c linux segmentation-fault fclose

19
推荐指数
4
解决办法
1万
查看次数

标签 统计

c ×1

fclose ×1

linux ×1

segmentation-fault ×1