是否有任何可移植的方式(在POSIX系統上)來確定文件描述符是否可搜索?我的想法是使用lseek(fd, 0, SEEK_CUR);
並檢查返回值是否爲-1,但我不確定這是否會導致錯誤的否定或誤報。使用fstat
並假定什麼類型的文件是可搜索/不可搜索的,聽起來不是一個好主意。任何其他想法?如何確定文件描述符是否可查找?
10
A
回答
10
lseek
方法似乎是合理的。它肯定不會造成錯誤的否定 - 如果確實如此,那麼執行過程中會出現嚴重錯誤。另外,根據POSIX spec,如果描述符是管道,FIFO或套接字,它應該失敗,所以理論上你也不應該有誤報。剩下的唯一問題是不同的系統如何符合規格。然而,看起來像其他任何方法,不管它們是什麼,肯定會比這個方便。
2
您可以使用fstat(),然後使用stat結構的mode字段上的S_ISREG宏來檢查它是否是常規文件;一個常規文件per definiton是可搜索的,而「非常規」(特殊)文件可能不是(我不知道是否有特殊文件也是可搜索的)。
但是,是的,檢查lseek()和errno == ESPIPE的返回值也應該起作用。原則上,the effect of lseek() on devices which are incapable of seeking is implementation-defined,所以要小心鼻子守護進程。
相關問題
- 1. 確定文件結構(描述文件描述符)是否爲'特殊文件'(即塊/字符設備)
- 2. 確定可讀文件描述符是否是管道的讀取端
- 3. Linux系統:檢查是否文件描述符可以讀取
- 4. 檢查套接字文件描述符是否可用?
- 5. 如何確定其他進程是否正在使用文件描述符?
- 6. 是否EXEC保存文件描述符
- 7. fopen是否創建文件描述符?
- 8. 是否可以在PHP中確定文件描述符的狀態?
- 9. 如何檢查文件描述符是否有可用的數據?
- 10. 是否可以找到XToolkit的描述?
- 11. 如何檢查文件是否仍然存在使用文件描述符
- 12. 如何確定描述符的類?
- 13. 如何通過int描述符找出文件名? (或「?可我..」)
- 14. 等待可讀文件描述符和可寫文件描述符
- 15. 檢查IniFile描述符是否打開
- 16. 如何知道文件描述符是否打開?
- 17. 檢查文件描述符是否有效
- 18. Linux內核 - 檢查是否有文件描述符
- 19. 如何檢查Expressionengine 2中的文件描述是否爲空?
- 20. 是否可以重新定義「描述」?
- 21. 如何在Bash中查找下一個可用的文件描述符?
- 22. 我如何找出文件的文件描述符
- 23. 文件描述符飢餓和阻斷文件描述符
- 24. 如何使一個文件描述符
- 25. 文件描述符如何工作?
- 26. bash的文件描述符重定向
- 27. 輸出文件描述符重定向
- 28. 重定向文件描述符
- 29. 什麼是文件描述符?
- 30. 關閉原始文件描述符後,重複的描述符文件是否關閉?
塊設備(如硬盤驅動器)可以搜索。甚至可能是角色設備,但我不確定。 – Thomas 2010-07-13 16:18:02
某些非真正可搜索的設備不會失敗(在Linux上,有人試圖使尋找失敗,但發現依賴於行爲的用戶空間應用程序......) – Spudd86 2010-07-13 18:10:37
正確;一些字符設備驅動程序簡單地忽略seek()並默默返回。 – 2010-07-27 06:23:42