Fungsi pipe ini akan menyambungkan input dari sebuah filedescriptor menjadi output pada filedescriptor lain. Input/output ini dibaca dengan menggunakan fungsi read() dan write().
Pipe juga dapat digunakan untuk stdin dan stdout layaknya pada penggunaan pipe pada terminal UNIX. Caranya adalah menduplikasikan file descriptor pipe tersebut ke dalam file descriptor dari stdout atau stdin.
Pada penggunaan terminal UNIX sehari-hari sering ditemukan runtunan seperti
$ ls | grep "tes" | lessUntuk penggunaan, file descriptor yang sudah dibuat pada pipe dapat digunakan kembali saat proses yang menggunakannya difork. Jadi tidak perlu langsung diclose. Kodenya:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int
main()
{
int
i;
int
fildes[2];
int
fdinput = -1;
for
(i = 0; i < 10; i++) {
pipe(fildes);
pid_t childpid = fork();
if
(childpid == 0) {
/* Write */
char
b[255];
close(fildes[0]);
dup2(fildes[1], STDOUT_FILENO);
if
(fdinput >= 0) dup2(fdinput, STDIN_FILENO);
scanf
(
"%s"
, b);
printf
(
"c%s"
);
close(fildes[1]);
if
(fdinput >= 0) close(fdinput);
exit
(EXIT_SUCCESS);
}
else
if
(childpid > 0) {
char
a[255];
close(fildes[1]);
fdinput = fildes[0];
if
(i == 9) {
dup2(fildes[0], STDIN_FILENO);
scanf
(
"%s"
, a);
printf
(
"%s\n"
, a);
}
}
}
}
Tidak ada komentar:
Posting Komentar