Я работал над проблемой в fork () и pipe () в C в Ubuntu 16.04, и вывод должен быть отсортированным массивом из 150 целых чисел. Вывод по желанию, однако, приглашение bash появляется в середине вывода. Его положение случайное каждый раз. Я нигде не нашел упоминаний об этом виде происшествия. Я не знаю, если это из-за моего кода или что-то еще. Подскажите пожалуйста причину? Это мой код bubbleSort - это обычная функция сортировки пузырьков.
int main(){
int pd1[2], pd2[2], pd3[2], pd4[2], j=0;
int p, ABC[50],D1[50],D2[50], i,D[100], E[150];
if(pipe(pd1)<0){
printf("Pipe1 creation failed!!...\nExiting...");
exit(1);
}
if(pipe(pd2)<0){
printf("Pipe2 creation failed!!...\nExiting...");
exit(1);
}
if(pipe(pd3)<0){
printf("Pipe3 creation failed!!...\nExiting...");
exit(1);
}
if(pipe(pd4)<0){
printf("Pipe4 creation failed!!...\nExiting...");
exit(1);
}
p=fork();
if(p<0){
printf("Fork creation failed!!...\nExiting...");
exit(1);
}
srand(time(NULL)+p);
for(i=0;i<50;i++){
ABC[i]=rand()%1000;
}
bubbleSort(ABC,50);
if(!p)
write(pd1[1],ABC,sizeof(ABC)+1);
else{
write(pd2[1],ABC,sizeof(ABC)+1);
if(fork()==0){
for(i=0;i<50;i++)
ABC[i]=rand()%1000;
bubbleSort(ABC,50);
write(pd3[1],ABC,50);
if(fork()==0){
read(pd1[0],D1,sizeof(D1));
read(pd2[0],D2,sizeof(D2));
//close(pd1[0]); close(pd1[1]); close(pd2[0]); close(pd2[1]);
for(i=0;i<50;i++){
D[i]=D1[i];
D[i+50]=D2[i];
}
bubbleSort(D,100);
write(pd4[1],D,sizeof(D)+1);
if(fork()==0){
read(pd3[0],ABC,sizeof(ABC));
read(pd4[0],D,sizeof(D));
//close(pd3[0]); close(pd3[1]); close(pd4[0]); close(pd4[1]);
for(i=0;i<100;i++)
E[i]=D[i];
for(i=0;i<50;i++)
E[i+100]=ABC[i];
bubbleSort(E,150);
for(int i=0;i<150;i++)
printf("%d %d\n",i,E[i]);
}
}
}
}
return 0;
}
Это вывод