我想使用(POSIX)pipe
以兩種方式連接。即我可以在兩端讀寫。POSIX`pipe` both ways
這可能嗎?
(我不想創建兩個管道,與4個文件描述符。我想只有2個文件描述符,我可以在兩端讀/寫)。
基本上,它應該是回退到如果失敗,則爲openpty
。
我想使用(POSIX)pipe
以兩種方式連接。即我可以在兩端讀寫。POSIX`pipe` both ways
這可能嗎?
(我不想創建兩個管道,與4個文件描述符。我想只有2個文件描述符,我可以在兩端讀/寫)。
基本上,它應該是回退到如果失敗,則爲openpty
。
管道嚴格單向。但在POSIX環境中,您可能有權訪問'socketpair()'調用,該調用在與'AF_UNIX'套接字域一起使用時會爲您提供一對雙向描述符,並且都已連接並準備就緒。在描述得到繼承。如果你想連接兩個獨立的預現有的流程,則需要手動創建插槽,並使用插座來電連接它們
我基本上現在這個代碼:。
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;
}
}
作品有點但並不完全正確但...
這有什麼錯用兩個管道? – Beta
沒有,PIP ES是單向的。如果你想在一個fd上進行雙向通信,你可以使用一個套接字(可能是AF_UNIX)或者 - 如你所建議的那樣 - 一個pty。 –
@亨寧:據說,我不能使用'openpty'(因爲它應該是它的後備)。你可以發佈一些示例代碼的插座方式?另外,爲什麼不把它作爲一個答案,而是一個評論? – Albert