posix - 当流为空时,fwrite 和 fread 等操作是否具有未定义的行为?

标签 posix system-calls c11

我专门在 C11 标准 (ISO/IEC 9899:2011) 或 POSIX 页面中查找该单词。我检查了POSIX manual for fwrite出,但它根本没有提到未定义的行为。然而,manual for fclose确实这么说

After the call to fclose(), any use of stream results in undefined behavior.

但我仍然不知道 NULL 流是否会导致 UB。

最佳答案

fread()fwrite() 都期望 stream 参数是成功调用 fopen 返回的值()fdopen()freopen()。由于这些函数在出错时返回 NULL,因此 stream 参数不能为 NULL。

由于手册页没有说明当stream不是成功调用fopen()等返回的值时会发生什么,这意味着手册页确实不要说当stream不是成功调用fopen()等返回的值时会发生什么,或者换句话说,行为未定义。

另请参阅此板上对问题“Why glibc's fclose(NULL) cause segmentation fault instead of returning error”的已接受答案。

关于posix - 当流为空时,fwrite 和 fread 等操作是否具有未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45924641/

相关文章:

c - 循环遍历文件并在 C 中打印文件属性

macos - Mac OS X 上 sched.h 中的 clone() 方法在哪里

c++ - 为什么 C 类型泛型表达式不能与 C++ 兼容?

强制转换为指向函数返回数组的指针 - 允许吗?

c - 编译 clang 的 <noreturn.h> 和 Windows header 时出现 declspec 错误

c - 为什么 sem_t 指针必须从 4 偏移量的倍数开始?

检查页面是否被锁定?

c - 从 POSIX 函数返回指针的一般内存所有权规则是什么?

子进程的 printf 未显示在父进程的控制台中

system-calls - Armv8 的 Linux 系统调用约定