2015-10-12 2 views
0

Попробуйте ответить на вывод программы и что это должно получить ответы, но это не сработает. Вот мой код:Как объединить трубку с одним execve

int main() { 

    char *args[] = {"./a.out", 0}; 
    int fd1[2], fd2[2]; 

    if(pipe(fd1) == -1 || pipe(fd2) == -1) { 
     perror("error pipe\n"); 
     return; 
    } 

    int pid = fork(); 
    if (pid == 0) { 
     dup2(fd2[0], 0); 
     close(fd2[1]); 

     execve("./a.out", args, NULL); 
    } else { 
     dup2(fd1[0], 0); 
     close(fd1[0]); 

     write(fd2[1], "23", 2); 
     write(fd2[1], "A", 1); 

     int status; 
     wait(&status); 
    } 

    return 0; 
} 

Заранее спасибо

+0

Ну, этот код, безусловно, ошибочен, вы создаете 2 трубы, но используете только один из них. Но без вашего объяснения ясно, что ** вы хотите сделать, невозможно сказать вам, как это сделать правильно. –

+0

Я пробовал только с трубой, но у меня также не получилось. Я хочу, чтобы, если программа спросила, какой у меня возраст (например), отвечаю на мой возраст. – Javi

+0

, так что вам нужно ждать подсказки от вашего ребенка? то вам нужно 2 трубы, проведите один к stdin, а другой - к stdout перед 'exec()' в программе. –

ответ

0

Наконец, моя ошибка была не написала новую строку в записи, и поэтому она совсем не читала Вызванную программу.

int main() { 

    char *args[] = {"./a.out", 0}; 
    int fd1[2]; 
    if(pipe(fd1) == -1) { 
     perror("error pipe\n"); 
     return; 
    } 

    int pid = fork(); 
    if (pid == 0) { 
     dup2(fd1[0], 0); 
     close(fd1[0]); 
     close(fd1[1]); 

     execve("./a.out", args, NULL); 
    } else { 

     write(fd1[1], "5\n", 2); 

     int status; 
     wait(&status); 
    } 

    return 0; 
}