回答
您可以使用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到套接字的任何事物。所以讀取的行可能不是一個正確的方法來實現,除非它非常相關的文件 –