Возможно, но это займет лот работы, и полная программа для этого слишком длинна, чтобы публиковать здесь. Особенно следует учитывать буферизацию ввода / вывода при чередовании чтения и записи. Впрочем, одна фаза записи, за которой следует одна фаза чтения, будет довольно простой.
В любом случае, я бы порекомендовал использовать socketpair вместо каналов. Они разрешают двунаправленную связь, в то время как каналы являются однонаправленными (поэтому вам нужны два канала, то есть четыре файловых дескриптора).
enum { FROMCHILD = 0, TOCHILD = 1 };
int fd[2];
socketpair(AF_UNIX, SOCK_STREAM, 0, fd); // check for errors
switch (fork()) {
case -1:
// handle error
case 0:
// child
dup2(fd[TOCHILD], 0);
dup2(fd[FROMCHILD], 1);
// try to exec
_exit(1);
default:
// parent: we may read from fd[FROMCHILD] and write to fd[TOCHILD]
}
Кроме того, убедитесь, что вы правильно указали в кавычках, если вам нужно создать / разобрать команду SSH в буфере argv
. Проверьте quote.c
из Git , если вам нужен пример кода (или обсуждение вопросов).