【发布时间】:2018-12-18 23:43:59
【问题描述】:
在 C 中,puts(string); 会将string 打印到标准输出,然后是换行符。另一方面,fputs(fileptr, string); 会将string 写入fileptr,而没有尾随的换行符。有没有像 fputs() 这样附加换行符的函数,还是我应该像我一直在使用的那样坚持使用 fprintf(fileptr, "%s\n", string);?
fputs() 对我来说似乎比fprintf() 更有效,因为它不解析它的输入。我知道我也可以使用
fputs(string, fileptr);
fputc('\n', fileptr);
但我想知道是否有办法通过一次磁盘写入来做到这一点。
我试图弄清楚puts() 如何附加换行符(因为printf() 实际上只是vfprintf(stdout, ...) 的包装,我认为puts() 和fputs() 可能也是如此),但奇怪的是在 glibc 源代码中找不到 puts()。
【问题讨论】:
-
似乎比 ... 您做了哪些分析显示两者之间存在显着差异,这是不可接受的,为什么?特别是因为磁盘 I/O,即使有缓冲,也比 CPU 周期长几个数量级?
-
这两个函数调用(
fputs(fileptr, string);和fputc(fileptr, '\n');)都是错误的。文件流参数位于最后,fprintf()和fscanf()及其变体除外。因此,函数调用应该是fputs(string, fileptr);和fputc('\n', fileptr);。
标签: c microbenchmark puts