fwrite是否在' \ n'?

时间:2018-02-22 12:26:24

标签: c stm32 stdio 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)

BUFSIZE是1024

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

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

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

1 个答案:

答案 0 :(得分:4)

  

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

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

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

如果您不喜欢,可以修改_isatty()以返回0,或在setvbuf()之后致电fopen()

  

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

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