gpt4 book ai didi

c - fgetc 与 Unix 文件描述符的等价物

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:40 25 4
gpt4 key购买 nike

fgetc(3)函数需要 FILE *作为它的输入流。我必须使用 read(2) 重新实现一次输入一个字符吗? ,或者是否有 <unistd.h> -style 等效于采用整数文件描述符代替?

最佳答案

不,没有这样的事情,请永远不要read(fd, &ch, sizeof(char))(下面有解释)。

read(2) 函数通常实现为 system call到操作系统 kernel .虽然这里不应讨论此类事情的内部(和时髦)细节,但总体思路是系统调用(通常)便宜。

用户空间应用程序和内核执行系统调用只是为了从文件描述符中获取单个字符是低效的。

例如,fgetc(3) 通常会在 FILE 对象的结构内进行一些缓冲。这意味着 fgetc(3) 的内部 read(2) 不会只读取单个字符,而是会尝试获取更多字符效率。

无论如何,搞砸这些低级的东西通常不是一个好主意。通过使用 fdopen(3),您可以获得缓冲(以及整个 FILE)的所有好处从文件描述符创建一个 FILE 对象,因为您的问题似乎暗示您目前手头只有一个原始文件描述符。

关于c - fgetc 与 Unix 文件描述符的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com