Я создал функцию сокета, чтобы запустить процесс, заполнить его данными и получить возврат
void runAndPrint()
{
int fd[2], fout[2], num_bytes;
int pid;
char c, buf[10], buffer[100];
FILE *fp;
pipe(fd);
if((pid = fork()) == -1)
return 1;
if (pid == 0)
{
while ((num_bytes = read(fileno(stdin), buffer, 1)) > 0){
write(fd[1], buffer, num_bytes);
}
printf("parent");
}
else
{
printf("child");
close(fd[1]);
dup2(fd[0], 0);
close(fd[0]);
pipe(fout);
if((pid = fork()) == -1)
return 1;
if (pid == 0)
{
close(fout[0]);
dup2(fout[1], 1);
close(fout[1]);
execlp("base64", "base64", NULL);
}
else
{
close(fout[1]);
while((c = read(fout[0], buf, 10)) > 0)
{
printf("--- %.*s", c, buf);
}
}
}
return 0;
}
и мне нужно выполнить его на сокете ....
Где я делаю, пока читаю .. пишу в фд [1] Я отправлю данные полученные из сокета. Данные, обработанные в процессе LOL я отправлю обратно в сокет.
Моя проблема:
int main(){
try{
TCPServerSocket servSock(echoServPort);
for(;;){
runAndPrint();
HandleTCPClient(servSock.accept());
}
}
}
Это всего лишь пример.
Но в цикле печатается только родительская часть, а не дочерняя, только потому, что она находится в цикле. Я не знаю, как продолжать процесс runAndPrint, пока не обработан дочерний процесс.