Я учусь c программой fork and pipe. Я создаю вилку, показанную ниже.
parent => child1 => child2
В parent мы создаем канал. И дескриптор файла хранится в parentpip.
В Child1 я также создаю трубу. И дескриптор файла хранится в child1pip.
Теперь, когда я проверяю идентификатор процесса fd в / proc // fd. Ниже отображаются вещи.
Если я сделаю ls -l / proc / 15585 / fd .. Это для родителя
lrwx------ 1 vipin vipin 64 Jan 14 17:33 0 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 1 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 2 -> /dev/pts/1
lr-x------ 1 vipin vipin 64 Jan 14 17:33 3 -> 'pipe:[354240]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 4 -> 'pipe:[354240]'
lr-x------ 1 vipin vipin 64 Jan 14 17:33 5 -> 'pipe:[354241]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 6 -> 'pipe:[354241]'
Если я сделаю ls -l / proc / 15586 / fd .. Это для child1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 0 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 1 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 2 -> /dev/pts/1
lr-x------ 1 vipin vipin 64 Jan 14 17:33 3 -> 'pipe:[354240]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 4 -> 'pipe:[354240]'
lr-x------ 1 vipin vipin 64 Jan 14 17:33 5 -> 'pipe:[357693]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 6 -> 'pipe:[357693]'
Если я сделаю ls -l / proc / 15587 / fd .. Это для child2
lrwx------ 1 vipin vipin 64 Jan 14 17:33 0 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 1 -> /dev/pts/1
lrwx------ 1 vipin vipin 64 Jan 14 17:33 2 -> /dev/pts/1
lr-x------ 1 vipin vipin 64 Jan 14 17:33 3 -> 'pipe:[354240]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 4 -> 'pipe:[354240]'
lr-x------ 1 vipin vipin 64 Jan 14 17:33 5 -> 'pipe:[357693]'
l-wx------ 1 vipin vipin 64 Jan 14 17:33 6 -> 'pipe:[357693]'
Здесь файловые дескрипторы 3 и 4 относятся к parentpip. Так же труба среди всех процессов труба: [354240] и труба: [354240]
Когда мы видим, что файловые дескрипторы 5 и 6 child2 и child1 содержат один и тот же child1pip. труба: [357693] и труба: [357693]
Но я могу видеть 5 и 6 в родителях также Почему также в родителях. И пипс это труба: [354241] и труба: [354241]
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<string.h>
int main(int argc,char * argv[])
{
int parentpip[2];
pipe(parentpip);
int child1pid =fork();
int child1pip[2];
pipe(child1pip);
if(child1pid==0)
{
printf("This child1");
int child2pid2=fork();
if(child2pid2==0)
{
printf("This child2");
}
sleep(20*60);
}
else
{
printf("This parent");
sleep(20*60) ;
}
return 0;
}