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

Cos*_*nus 7 c stdio stm32 newlib

我有自己的执行_open(),_close(),_write(),_read().

我的代码:

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

BUFSIZE 是1024

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

即使我有旗帜,为什么要fwrite()解释?'\n'"wb"

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

ber*_*ing 5

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

因为流是行缓冲的。流是否会变成行缓冲不是由传递给 的标志决定的fopen()

您使用的工具链附带了 Red Hat 的 newlib,它isatty()在第一次尝试读取或写入流时调用该函数。如果isatty()返回非零值,则流将被行缓冲。

如果不喜欢,可以修改_isatty()为 return 0,或者setvbuf()after调用fopen()

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

不,任何文件名都会直接传递到_open().