2011-09-06 58 views
1

我想使用(POSIX)pipe以兩種方式連接。即我可以在兩端讀寫。POSIX`pipe` both ways

這可能嗎?

(我不想創建兩個管道,與4個文件描述符。我想只有2個文件描述符,我可以在兩端讀/寫)。

基本上,它應該是回退到如果失敗,則爲openpty

+0

這有什麼錯用兩個管道? – Beta

+4

沒有,PIP ES是單向的。如果你想在一個fd上進行雙向通信,你可以使用一個套接字(可能是AF_UNIX)或者 - 如你所建議的那樣 - 一個pty。 –

+0

@亨寧:據說,我不能使用'openpty'(因爲它應該是它的後備)。你可以發佈一些示例代碼的插座方式?另外,爲什麼不把它作爲一個答案,而是一個評論? – Albert

回答

2

管道嚴格單向。但在POSIX環境中,您可能有權訪問'socketpair()'調用,該調用在與'AF_UNIX'套接字域一起使用時會爲您提供一對雙向描述符,並且都已連接並準備就緒。在描述得到繼承。如果你想連接兩個獨立的預現有的流程,則需要手動創建插槽,並使用插座來電連接它們

0

我基本上現在這個代碼:。

int fildes[2] = {-1,-1}; 
int ret = openpty(&fildes[0], &fildes[1], ttyname, &term, &win); 
if(ret != 0) { 
    fprintf(stderr, "openpty failed: %s\n", strerror(errno)); 
    ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fildes); 
    if(ret != 0) { 
     fprintf(stderr, "socketpair failed: %s\n", strerror(errno)); 
     return; 
    } 
} 

作品有點但並不完全正確但...