7

我有自己的_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"

4

1 回答 1

4

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

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

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

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

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

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

于 2018-02-22T14:35:14.757 回答