Contoh Soal PID Proses

Soal:
Suatu proses induk akan mengirimkan dua bilangan (parameter) kepada dua proses anak. Tiap proses anak akan mengecek apakah bilangan tersebut merupakan bilangan ganjil ataukah bukan. Bila ganjil, maka proses anak akan mengirimkan nilai 1 kepada proses induk. Bila genap, proses anak akan mengirimkan nilai 0 kepada proses induk. Proses induk lalu melakukan pengecekan logika terhadap hasil dari proses anak tersebut. Pengecekan bisa menggunakan “OR” ataupun “AND”. Semua hasil lalu ditampilkan di layar oleh proses induk
Hasinya:

PID

Jawab:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

void child(int InputNumber1, int InputNumber2, int totalpipe)
{
int IntProcess1,IntProcess2,Hasil1,Hasil2,HasilAkhir1,HasilAkhir2;
int pipex[4][2],i;
FILE *FileInput[100],*FileOutput[100];
pid_t pid[100];
i=0;
while(i<totalpipe)
{
pipe(pipex[i]);
i++;
}
FileInput[1] = fdopen(pipex[0][1],”w”);
fprintf(FileInput[1],”%d\n”,InputNumber1);
fclose(FileInput[1]);
FileInput[2] = fdopen(pipex[2][1],”w”);
fprintf(FileInput[2],”%d\n”,InputNumber2);
fclose(FileInput[2]); pid[1] = fork();
if(pid[1]==-1)
{
exit(EXIT_FAILURE);
}
else if(pid[1]==0)
{
close(pipex[0][1]);
FileInput[1] = fdopen(pipex[0][0],”r”);
fscanf(FileInput[1],”%d”,&IntProcess1);
fclose(FileInput[1]);
Hasil1 = IntProcess1%2;
printf(”Anak Pertama Mengirimkan : %d\n”,Hasil1);
FileOutput[1] = fdopen(pipex[1][0],”w”);
fprintf(FileOutput[1],”%d\n”,Hasil1);
fclose(FileOutput[1]);
}
else
{
pid[2] = fork();
if(pid[2]==-1)
{
exit(EXIT_FAILURE);
}
else if(pid[2]==0)
{
close(pipex[2][1]);
FileInput[2] = fdopen(pipex[2][0],”r”);
fscanf(FileInput[2],”%d”,&IntProcess2);
fclose(FileInput[2]);
Hasil2 = IntProcess2%2;
printf(”Anak Kedua Mengirimkan : %d\n”,Hasil2);
FileOutput[2] = fdopen(pipex[3][1],”w”);
fprintf(FileOutput[2],”%d\n”,Hasil2);
fclose(FileOutput[2]);
}
else
{
printf(”===================================================\n”);
FileOutput[1] = fdopen(pipex[0][0],”r”);
fscanf(FileOutput[1],”%d”,&HasilAkhir1);
fclose(FileOutput[1]);
FileOutput[2] = fdopen(pipex[3][0],”r”);
fscanf(FileOutput[2],”%d”,&HasilAkhir2);
fclose(FileOutput[2]);
printf(”Hasil dari OR : %d\n”,HasilAkhir1||HasilAkhir2);
printf(”Hasil dari AND : %d\n”,HasilAkhir1&&HasilAkhir2);
exit(EXIT_SUCCESS);
}
}
return;
}

int main ()
{
int InputNumber1,InputNumber2;

printf(”Masukkan angka pertama (#1): “);
scanf(”%d”,&InputNumber1);
printf(”Masukkan angka kedua (#2) : “);
scanf(”%d”,&InputNumber2);

child(InputNumber1,InputNumber2,4);
return 0;
}

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Comments

Hi, nice post. I have been pondering this topic,so thanks for posting. I’ll definitely be subscribing to your site. Keep up the good work

Leave a comment

(required)

(required)