fwrite函数在遇到换行符时是否会刷新缓冲区?

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"


2
这取决于缓冲模式 - 请参阅 setvbuf() 和相关函数... - Attie
1个回答

5
为什么使用 fwrite(),即使我有 "wb" 标志,它也会解析 '\n'
因为此流是行缓冲的。流是否成为行缓冲取决于传递给 fopen() 的标志。
您使用的工具链随附了 Red Hat 的 newlib,该工具在第一次尝试从流中读取或写入时调用了 isatty() 函数。如果 isatty() 返回非零值,则流将成为行缓冲模式。
如果您不喜欢这种行为,则可以修改 _isatty() 以返回 0 或在 fopen() 后调用 setvbuf()

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接