C++
C#
Turunan
Proses Kompilasi
Manajemen memori
Statemen switch
Prototype
Mengenal prototyping
Inheritance
Penutup class
Pointer
10 Minimal
4. Pipe adalah metode untuk menghubungkan standar output suatu proses dengan standar input
proses yang lain. Pipe ini merupakan metode komunikasi IPC yang paling tua sepanjang
perkembangan sistem operasi. Komunikasi yang disediakan pipe adalah komunikasi dengan
metode satu arah oleh karena itu disebut half duplex. Fasilitas seperti ini sangat banyak
digunakan ,bahkan di perintah-perintah baris (shell command) seperti
$ls | sort | lp
Perintah diatas menentukan output dari perintah ls, menjadi input perintah sort,
dan output dari perintah sort akan menjadi input dari perintah lp. Data bergerak
melalui half-duplex pipe, dari kiri ke kanan.
Contoh penggunaan pipe:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
{
/* Child process closes up input side of pipe */
close(fd[0]);
/* Send "string" through the output side of pipe */
write(fd[1], string, strlen(string));
exit(0);
}
else
{
/* Parent process closes up output side of pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return 0;
}
Fork adalah perintah yang digunakan membuat sebuah proses. Proses baru yang dibuat oleh
perintah fork disebut proses anak. Nilai yang dikembalikan oleh perintah ini ada 2, yaitu pada
child return valuenya adalah 0, sedangkan pada parent return valuenya adalah process id (pid)
child. Hal ini dikarenakan sebuah proses dapat memiliki lebih dari satu child, sehingga proses
induk dapat mengakses proses anak dengan menggunakan pid tersebut. Proses anak dapat
mengerjakan semua perintah setelah perintah fork, dan proses induk akan mengerjakan semua
perintah pada program.
Contoh penggunaan fork:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void main()
{
pid_t pid;
int rv;
switch(pid=fork()) {
case -1:
perror("fork"); /* something went wrong */
exit(1); /* parent exits */
case 0:
printf(" CHILD: This is the child process!\n");
printf(" CHILD: My PID is %d\n", getpid());
printf(" CHILD: My parent's PID is %d\n", getppid());
printf(" CHILD: Enter my exit status (make it small): ");
scanf(" %d", &rv);
printf(" CHILD: I'm outta here!\n");
exit(rv);
default:
printf("PARENT: This is the parent process!\n");
printf("PARENT: My PID is %d\n", getpid());
printf("PARENT: My child's PID is %d\n", pid);
printf("PARENT: I'm now waiting for my child to exit()...\n");
wait(&rv);
printf("PARENT: My child's exit status is: %d\n",
WEXITSTATUS(rv));
printf("PARENT: I'm outta here!\n");
}
}