簡體   English   中英

確定可讀文件描述符是否是管道的讀取端

[英]Determining whether a readable file descriptor is the read end of a pipe

我想使用splice將數據從STDIN_FILENO零復制到文件描述符(可以是常規文件,字符或塊設備,FIFO或任何可以open )。 為了使用splice ,無論是文件描述符或文件描述符必須是一個管的適當端,所以一般的管在創建時程序員希望從非管到零拷貝數據以用作中介緩沖非管。 但是,如果STDIN_FILENO已經是管道的讀取端,那么我可以跳過該步驟並嘗試直接從STDIN_FILENO拼接到另一個文件描述符。 因此,我希望能夠確定STDIN_FILENO是否是管道的讀取端。

是否有Linux系統調用可以確定STDIN_FILENO是否是管道的讀取端?

要獲取有關open fd的信息,可以使用fstat()。 我猜測結果的st_mode應該是管道的S_IFIFO。 或者,/ proc / self / fd /和/ proc / self / fdinfo /還提供有關文件描述符的一些信息。 請記住,/ proc是特定於Linux的。

但是,我認為首先嘗試使用splice()並且如果失敗(使用EINVAL?)可能會更容易回到你的魔法。

作為替代方案,如果“fd與管道,套接字或FIFO相關聯”,則lseek()將使用ESPIPE失敗。 因此,無操作lseek(fd, 0, SEEK_CUR)將告訴您文件描述符是否是這些中的任何一個。

在我的情況下,這涵蓋了我感興趣的所有案例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM