【问题标题】:Which is better, ch = '\n'; write(1, &ch, 1); or putchar('\n');?哪个更好,ch = '\n';写(1,&ch,1);或 putchar('\n');?
【发布时间】:2016-09-18 14:17:06
【问题描述】:

然后我遇到了系统调用“write”,我试图将“putchar”与“write”进行比较。现在,我对上面的代码行感到困惑。

【问题讨论】:

  • 您查看过writeputchar 的手册页吗?你觉得困惑的是什么?
  • 看过手册,知道write是系统调用,putchar是库函数。我在一个优于另一个方面感到困惑,即在效率和内存使用方面。即“putchar”的内部架构是什么?
  • 我问你有什么困惑,但你没有说。
  • 对不起,具体来说putchar一定是用write系统调用,那系统调用和上面的实现有什么不同?

标签: c operating-system out-of-memory system-calls standard-library


【解决方案1】:

putchar 是一个库函数。它调用 write 系统调用将字符写入标准输出。

如果我们多次访问系统调用,系统性能会变慢。

所以只有库函数被实现了。

用于写入的库函数,它分配一个缓冲区,如果缓冲区已满或刷新,则仅调用write系统调用将内容写入stdout。

所以,如果你想要好的系统性能,你必须使用库函数(putchar)。

是否需要立即写入输出,可以使用 write 系统调用。

【讨论】:

  • 一些改进是可能的:write 也是 library function,通常通过包装 write 系统调用来实现 - 但也许不是。 putchar 可能会或可能不会直接进行 write 系统调用 - 它可能会改为调用 write 函数,或完全调用其他函数。 如果你想要好的系统性能,你必须使用库函数也许。这个概括太笼统了。 任何需要立即写入输出的,都可以使用 write 系统调用 或者使用STDIOstderr - fputc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2019-05-16
  • 1970-01-01
  • 2014-06-13
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多