POSIX`管道`两种方式

时间:2011-09-06 02:16:13

标签: unix pipe pty

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

这可能吗?

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

基本上,如果失败,它应该是openpty的后备。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;
    }
}

工作有点但不太正确......