回答
您可以使用fdopen
从filedescriptor中创建FILE流。
要一般地从文件描述符中获取一行,您需要一次向操作系统请求一个字符,而且效率非常低。 (POSIX shell中的read
内置工作就像这样 - 它通过一次检索一个字节来非常低效地读取行)。
FILE流批量询问OS的数据,这会提高效率,但文件描述符可能不会是一个可回退的文件 - 它可能是一个套接字或一个管道,如果要求输入100个字符,并且该100个批处理的第三个字符是换行符,则无法一般性地撤消97个字符之后的读取。
你不需要一次询问操作系统一个字符,一个简单的实现是可以使用静态缓冲区一次获取多个字节正如你想要的操作系统。 这实际上是我在Epitech学习的一所学校的编码练习,名为get_next_line。我相信你可以在GitHub上找到很多这个名字的学生项目。 请注意,如果你想使用其中的一个,你应该得到一个将文件描述符保存在一个数组中以便能够一次处理多个文件的文件描述符。 – deb0ch
@ deb0ch当然。但是,那么您将阅读的不仅仅是一行,这意味着您对该文件的后续访问将关闭,除非您a)继续使用缓冲层b)倒带。和b)并不总是可能的,因为并非所有文件都是可回放的。 – PSkocik
是的,这就是为什么我正在谈论静态缓冲区,以便在后续调用中重用它,并在获取新数据之前消耗缓冲区中已有的行。可能需要做一些工作才能在close()和open()之间保证可靠性,以便为不同的文件提供相同的fd,但我的观点只是它*在技术上是可行的。 – deb0ch
- 1. 将char指针指向内存文件并带有文件描述符
- 2. 关闭文件指针而不关闭底层文件描述符
- 3. 从文件描述符获取文件指针
- 4. 文件描述符和文件指针有什么区别?
- 5. 管理指向套接字文件描述符的指针
- 6. 文件描述符饥饿和阻断文件描述符
- 7. 文件描述符,文件指针和文件位置指示符之间的关系
- 8. 文件指针移动的函数getline
- 9. 如何将文件指针(FILE * fp)转换为文件描述符(int fd)?
- 10. 为什么我们需要文件描述符和文件指针
- 11. 坏文件描述符文件无
- 12. 文件描述符和打开文件
- 13. c strcpy文件描述符
- 14. webservice描述符文件
- 15. 关闭文件描述符
- 16. 创建文件描述符
- 17. Linux open()文件描述符
- 18. 实现文件描述符
- 19. 文件描述符轮询
- 20. 写作文件描述符
- 21. 是否EXEC保存文件描述符
- 22. fopen是否创建文件描述符?
- 23. 什么是文件描述符?
- 24. 带描述的文件上传
- 25. 文件描述符和套接字文件描述符之间的区别
- 26. 确定文件结构(描述文件描述符)是否为'特殊文件'(即块/字符设备)
- 27. 等待可读文件描述符和可写文件描述符
- 28. 文件描述符是在Unix上是其本地进程还是全局文件描述符
- 29. SOCKET文件描述
- 30. 套接字描述符与文件描述符
'getline'不是来自C标准,我想你是指POSIX功能? –
术语文件描述符是非常主观的,它可以是从IOFile到套接字的任何事物。所以读取的行可能不是一个正确的方法来实现,除非它非常相关的文件 –