Помогите, пожалуйста, разобраться. Есть программа, где используются вызовы fork() и pipe(). В процессе-родителе записывается информация в дескриптор fd[1], а в процессе-ребенке читается дескриптор fd[0] и выводятся эти данные на экран. Все это написано в одном файле. А у меня задача, чтобы в процессе-ребенке вызвался вызов exec() и оттуда как-то прочиталась информация, которую мы записали в процессе-родителе в дескрипторе fd[1]. Проблема в том, что в exec() мы же передаем файл, а в этом файле я не могу получить доступ к тем дескрипторам, которые были созданы в первоначальном файле. Помогите, разобраться с этим заданием. Много времени уже не могу разобраться. Вот собственно код, который нужно поменять:
#include <sys/types.h> #include <unistd.h> #include <stdio.h>
int main(){
int fd[2], result;
size_t size;
char resstring[14];
if(pipe(fd) < 0){
printf(«Can\'t create pipe\n»);
exit(-1);
}
result = fork();
if(result <0){ //ошибка создания
printf(«Can\'t fork child\n»);
exit(-1);
} else
if (result > 0) { //родительский процесс
close(fd[0]);
size = write(fd[1], «Hello, world!», 14)
if(size != 14){
printf(«Can\'t write all string\n»);
exit(-1);
}
close(fd[1]);
printf(«Parent exit\n»);
} else { //процесс ребенок close(fd[1]);
size = read(fd[0], resstring, 14);
if(size < 0){
printf(«Can\'t read string\n»);
exit(-1);
} printf(«%s\n»,resstring);
close(fd[0]);
}
return 0;
}
А вот задание: Модифицировать программу так, чтобы канал использовался для связи двух родственных процессов, исполняющих разные программы. Обратить внимание, на то, что процесс ребенок должен читать информацию из канала после замены его пользовательского контекста.