2015-10-31 2 views
0

Я учусь, как использовать вилку и трубы, и у меня есть проблемы с этим кодом:трубы и STDOUT

int pid; 
char *command_arg[] = {"date", NULL, NULL}; 

pid = fork(); 

if (pid == 0) 
{ 
    execvp("date", command_arg); 
} 
else 
{ 
    wait(NULL); 
} 

С execvp Я хочу, чтобы запустить команду «дата» и записать на стандартный вывод. Нужен ли мне здесь труба для записи «даты» в STDOUT? Как это сделать в этом примере?

+2

Нужно ли пробовать это? –

+0

Знаете ли вы, что файловые дескрипторы для stdin/stdout/stderr наследуются дочерним? – Jens

ответ

2

От страницы человека вилка():

* The child inherits copies of the parent's set of open file descrip‐ 
     tors. Each file descriptor in the child refers to the same open 
     file description (see open(2)) as the corresponding file descriptor 
     in the parent. This means that the two descriptors share open file 
     status flags, current file offset, and signal-driven I/O attributes 
     (see the description of F_SETOWN and F_SETSIG in fcntl(2)). 

Другими словами, вам не нужно делать ничего особенного, чтобы получить date «s на стандартный вывод родителя.