2015-04-01 2 views
0

Я использую execlp() для выполнения команд на дочернем процессе и сохранить в трубу, чтобы быть прочитано родителем как таковые, напримерпечати содержимое трубы на экран

int pipefd[2]; 
if (pipe(pipefd)) { 
    perror("pipe"); 
    exit(127); 
} 
if(!fork()){ 
    close(pipefd[0]); 
    dup2(pipefd[1], 1); 
    close(pipefd[1]); 
    execlp("ls", "ls", NULL); 
} else { 
    close(pipefd[1]); 
    dup2(pipefd[0], 0); 
    close(pipefd[0]); 
    execlp("wc", "wc", NULL); 
} 

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

ответ

1

как я могу напечатать [содержание] трубы [на] экран

read() из байта трубы по байту и printf("%d\n", byte); это пока труба пуста, то есть, пока read() не вернулся 0 ,

Если вы можете ASURE это просто текст, проходящий через трубу не печатают байт, как int (по одному на строку, как показано выше), но как char подряд с помощью printf("%c", byte);

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