【问题标题】:How to implement fgets using low-level I/O?如何使用低级 I/O 实现 fgets?
【发布时间】:2018-10-15 14:53:57
【问题描述】:
char *fgets(char *str, int n, FILE *stream)

我知道这两个是非常不同的。 fgets 与 FILE * 一起使用,read 与文件描述符一起使用。 fgets 读取直到换行,读取读取您告诉它的内容。是否可以实现 fgets,或者查看 fgets 的系统代码?

【问题讨论】:

  • 问:是否可以实现 fgets,或者查看 fgets 的系统代码? 答:可以,几乎整个 C CRT 库都是用 C 编写的。 Q:是否可以看到 fgets 的系统代码?答:是的,是的。只是谷歌“fgets 源代码”(不是开玩笑),有很多实现,或多或少每个平台都有自己的。
  • @Jabberwocky:就其价值而言,不可能完全用 C 来实现 C 标准库。不过,大部件可以。
  • @R.. 对,我编辑了评论。

标签: c unix io architecture operating-system


【解决方案1】:

fgets 只能在 stdio 缓冲之上高效实现;否则,由于read 没有在第一个换行符处停止的底层变体,您将不得不重复调用read,请求长度为1。

如果你有兴趣阅读一些实现的源代码,这里是 glibc 的:

这里是musl的:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多