我有自己的_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"
?
答案 0 :(得分:4)
为什么
fwrite()
解释'\n'
即使我有"wb"
标志?
因为流是行缓冲的。流是否会变为行缓冲不是由传递给fopen()
的标志决定的。
您使用的工具链附带Red Hat的newlib,它在第一次尝试读取或写入流时调用isatty()
函数。如果isatty()
返回非零值,则流将进行行缓冲。
如果您不喜欢,可以修改_isatty()
以返回0
,或在setvbuf()
之后致电fopen()
。
fopen()
是否解释文件名"0:test"
?
不,任何文件名都会直接传递给_open()
。