2012-05-22 2 views
2

Я пытаюсь перенаправить stdin от родителя к дочернему через канал «my_pipe», но когда я запускаю свою программу, я не вижу ожидаемых результатов.Почему перенаправление stdin в C не работает?

Когда я запускаю программу, он ожидает ввода от stdin, поэтому почему он не перенаправил stdin в dup2?

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <string.h> 



int main(int argc, char* argv[]) 
{ 
    char* arguments[] = {"sort", NULL}; 

    int my_pipe[2]; 
    if(pipe(my_pipe) == -1) 
    { 
     fprintf(stderr, "Error creating pipe\n"); 
    } 

    pid_t child_id; 
    child_id = fork(); 
    if(child_id == -1) 
    { 
     fprintf(stderr, "Fork error\n"); 
    } 
    if(child_id == 0) // child process 
    { 
     close(my_pipe[1]); // child doesn't write 
     dup2(0, my_pipe[0]); // redirect stdin 

     execvp(argv[0], arguments); 

     fprintf(stderr, "Exec failed\n"); 
    } 
    else 
    { 
     close(my_pipe[0]); // parent doesn't read 

     char reading_buf[1]; 
     write(my_pipe[1], "hello", strlen("hello")); 
     write(my_pipe[1], "friend", strlen("friend")); 
     close(my_pipe[1]); 
     wait(); 
    } 
} 

ответ

5

Ваши аргументы в dup2 указаны в обратном порядке. Попробуйте dup2(my_pipe[0], STDIN_FILENO)

+0

Да! Вот так! Большое спасибо. – XavierusWolf

Смежные вопросы