fwrite 是否刷新 '\n' 上的缓冲区?

Does fwrite flush the buffer on '\n'?

我有自己的 _open()_close()_write()_read()

我的代码:

FILE *f = fopen("0:test", "wb");  // calls _open()
fwrite("hello ", 6, 1, f);
fwrite("world\r\n[=10=]", 8, 1, f); // calls _write(3, "hello world\r\n", 13)
fflush(f);                      // calls _write(3, "[=10=]", 1)
fclose(f);                      // calls _close(3)

BUFSIZE 是 1024

编译器:arm-none-eabi-gcc/版本:5.4.1

为什么 fwrite() 解释 '\n' 即使我有标志 "wb"

是否 fopen() 解释文件名 "0:test"

Why does fwrite() interpret '\n' even though I have the flags "wb"?

因为流是行缓冲的。流是否变为行缓冲不是由传递给 fopen().

的标志决定的

您使用的工具链随附有 Red Hat 的 newlib,它会在第一次尝试读取或写入流时调用 isatty() 函数。如果 isatty() return 是非零值,则流将进行行缓冲。

如果不喜欢可以将_isatty()修改为return0,或者在fopen()之后调用setvbuf().

Does fopen() interpret the filename "0:test"?

不,任何文件名都将直接传递给 _open()