У меня есть родительский и дочерний процессы, и родитель может читать выходные данные дочернего элемента и отправлять их на вход дочернего элемента. Пока что все отлично работает со скриптами оболочки, тестирующими команды, которые вводят и выводят данные. Я только что протестировал с простой программой на C и не смог заставить ее работать. Вот программа на C:
#include <stdio.h>
int main( void ) {
char stuff[80];
printf("Enter some stuff:\n");
scanf("%s", stuff);
return 0;
}
Проблема с программой на C состоит в том, что мой выбор не может прочитать от дочернего fd и, следовательно, программа не может завершиться. Вот бит, который делает выбор ..
//wait till child is ready
fd_set set;
struct timeval timeout;
FD_ZERO( &set ); // initialize fd set
FD_SET( PARENT_READ, &set ); // add child in to set
timeout.tv_sec = 3;
timeout.tv_usec = 0;
int r = select(FD_SETSIZE, &set, NULL, NULL, &timeout);
if( r < 1 ) { // we didn't get any input
exit(1);
}
Кто-нибудь знает, почему это происходит с программой на C, а не с оболочкой?
Редактировать: я должен указать, что дочерний процесс вызывает exec для аргумента, поэтому у меня нет доступа к нему после этой точки.