Предположим, у меня есть процесс p
, который использует дескриптор файла, например, безымянный канал, для связи со своим родительским процессом p1
.
Предположим, p
вызывает fork()
, чтобы создатьдочерний процесс c
, который сразу после fork()
вызывает одну из функций семейства exec
.
По умолчанию дескрипторы файлов родительского элемента дублируются для дочернего элемента даже при использовании exec
.Так что c
должен иметь возможность общаться с p1
, если его родитель p
открыл дескриптор файла для p1
.
Как мне получить этот дескриптор файла в исходном коде C c
дочерний процесс, если переменная, соответствующая этому дескриптору файла, определена только в p
(и p1
)?
Просто для примера того, что я имею в виду, ниже приведен код для p
и p1
//p1 process
int fd[2];
pipe(fd);
pid_t p_pid, c_pid;
p_pid = fork();
if(p_pid == 0) // p process
{
/* p_pid closes up input side of pipe */
close(fd[0]);
c_pid = fork();
if (c_pid)==0 //c child process
{
exec("execution/child/process"...);
}
else
{
...// do p process parenting stuff
}
}
else
{
/* Parent p1 process closes up output side of pipe */
close(fd[1]);
}
Теперь "execution/child/process"
имеет собственный исходный код, и я не могу использовать переменную fd
для связи с p1
, поскольку она не определена, но должен существовать файловый дескриптор:так как ссылаться на него и использовать его?