C语言 相当于Unix文件描述符中的fgetc



fgetc(3)函数以FILE *作为其输入流。我必须重新实现字符一次输入与read(2),或者有一个<unistd.h>风格等效的整数文件描述符代替?

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

函数read(2)通常作为对操作系统内核的系统调用来实现。虽然这里不讨论这种事情的内部(和时髦的)细节,但总体思想是系统调用(通常)不是便宜的东西。

对于用户空间应用程序和内核来说,仅仅为了从文件描述符中获取一个字符而进行系统调用是低效的。

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

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

如果您愿意,您可以使用open() -

打开文件。
int fh = open("abc.txt", O_RDONLY, S_IREAD);  // there are different permissions you can provide (refer to link).

,然后可以在read()调用中使用fh

相关内容

  • 没有找到相关文章