fwrite 是否刷新 '\n' 上的缓冲区?
Does fwrite flush the buffer on '\n'?
我有自己的 _open()
、_close()
、_write()
、_read()
。
我的代码:
FILE *f = fopen("0:test", "wb"); // calls _open()
fwrite("hello ", 6, 1, f);
fwrite("world\r\n[=10=]", 8, 1, f); // calls _write(3, "hello world\r\n", 13)
fflush(f); // calls _write(3, "[=10=]", 1)
fclose(f); // calls _close(3)
BUFSIZE
是 1024
编译器:arm-none-eabi-gcc
/版本:5.4.1
为什么 fwrite()
解释 '\n'
即使我有标志 "wb"
?
是否 fopen()
解释文件名 "0:test"
?
Why does fwrite()
interpret '\n'
even though I have the flags "wb"
?
因为流是行缓冲的。流是否变为行缓冲不是由传递给 fopen()
.
的标志决定的
您使用的工具链随附有 Red Hat 的 newlib,它会在第一次尝试读取或写入流时调用 isatty()
函数。如果 isatty()
return 是非零值,则流将进行行缓冲。
如果不喜欢可以将_isatty()
修改为return0
,或者在fopen()
之后调用setvbuf()
.
Does fopen()
interpret the filename "0:test"
?
不,任何文件名都将直接传递给 _open()
。
我有自己的 _open()
、_close()
、_write()
、_read()
。
我的代码:
FILE *f = fopen("0:test", "wb"); // calls _open()
fwrite("hello ", 6, 1, f);
fwrite("world\r\n[=10=]", 8, 1, f); // calls _write(3, "hello world\r\n", 13)
fflush(f); // calls _write(3, "[=10=]", 1)
fclose(f); // calls _close(3)
BUFSIZE
是 1024
编译器:arm-none-eabi-gcc
/版本:5.4.1
为什么 fwrite()
解释 '\n'
即使我有标志 "wb"
?
是否 fopen()
解释文件名 "0:test"
?
Why does
fwrite()
interpret'\n'
even though I have the flags"wb"
?
因为流是行缓冲的。流是否变为行缓冲不是由传递给 fopen()
.
您使用的工具链随附有 Red Hat 的 newlib,它会在第一次尝试读取或写入流时调用 isatty()
函数。如果 isatty()
return 是非零值,则流将进行行缓冲。
如果不喜欢可以将_isatty()
修改为return0
,或者在fopen()
之后调用setvbuf()
.
Does
fopen()
interpret the filename"0:test"
?
不,任何文件名都将直接传递给 _open()
。