1

我想以pipe某种方式使用(POSIX)以使其双向连接。即我可以在两端读写。

那可能吗?

(我不想用 4 个文件描述符创建两个管道。我只想有 2 个文件描述符,我可以在两端读/写。)

基本上,它应该是openpty万一失败的后备。

4

2 回答 2

2

管道是严格单向的。但是在 POSIX 环境中,您可能可以访问“socketpair()”调用,当与“AF_UNIX”套接字域一起使用时,它将为您提供一对双向描述符,所有这些描述符都已连接并准备就绪。如果您将分叉和描述符被继承。如果您尝试连接两个单独的预先存在的进程,那么您将需要手动创建套接字并使用套接字调用来连接它们。

于 2011-09-06T02:33:12.983 回答
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;
    }
}

有点工作,但还不完全正确......

于 2011-09-06T02:33:33.803 回答