【问题标题】:How does fgetc work internallyfgetc 内部如何工作
【发布时间】:2012-03-20 18:08:51
【问题描述】:

它实际上是逐个字符地读取,还是将一些字节读入内核缓冲区并逐个字符地返回给用户?

fgets一样吗?

假设我使用 glibc 和 gcc 编译器。

【问题讨论】:

  • 这完全取决于您的特定平台/C 编译器/运行时/等。标准没有说。你说的是什么平台?

标签: c glibc stdio fgets fgetc


【解决方案1】:

几乎是对的。具有用户/内核分离的典型现代实现将字节存储在用户缓冲区中,而不是内核缓冲区中。因此,对fgetc 的多次调用实际上触发了少数真正的系统调用。

【讨论】:

  • 也许,也许不是。许多平台(例如 DOS)对两者之间没有区别的概念。这完全是特定于平台的。
  • @BillyONEal 真的。但我认为无论如何,OP 已经超出了严格标准批准的限制,因此讨论最常见的实现可能是有意义的。
  • 什么“最常见的实现”?就计算机的数量而言,世界上的微型微控制器比全尺寸台式机多得多。而且它们没有用户空间和内核空间的分离。许多 RISC 也没有。简而言之,所提出的问题是无法回答的。 (这就是我对这个问题投反对票的原因)
  • @BillyONeal 我再次更改了措辞 :-))自从 OP 提到 kernel 以来,我假设了这种分离。
  • @SharatChandra 那么你可以在你的问题中提到glibc
猜你喜欢
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 2023-01-11
  • 2019-01-13
  • 2010-10-14
  • 2013-09-28
  • 2012-08-01
  • 2011-12-10
相关资源
最近更新 更多