POSIX `труба` в обе стороны - PullRequest
       34

POSIX `труба` в обе стороны

1 голос
/ 06 сентября 2011

Я хочу использовать (POSIX) pipe таким образом, чтобы он был подключен в обе стороны. То есть Я могу читать и писать на обоих концах.

Возможно ли это?

(Я не хочу создавать два канала с 4 файловыми дескрипторами. Я хочу иметь только 2 файловых дескриптора, где я могу читать / писать с обоих концов.)

В основном, это должен быть запасной вариант к openpty в случае сбоя.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Трубы строго однонаправлены.Но в среде POSIX у вас может быть доступ к вызову socketpair (), который при использовании с доменом сокета AF_UNIX даст вам пару двунаправленных дескрипторов, все подключенные и готовые к работе. Это удобно, если вы выполните форк идескрипторы наследуются. Если вы пытаетесь соединить два отдельных ранее существующих процесса, вам нужно будет создать сокеты вручную и использовать вызовы сокетов для их соединения.

0 голосов
/ 06 сентября 2011

У меня сейчас такой код:

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;
    }
}

Работает немного, но пока не совсем верно ...

...