|
The contents of this page are licensed under the following license
Operating System
Unnamed pipe |
#include <stdio.h>
#include <unistd.h>
int main()
{
int fd[2];
/* create pipe */
pipe(fd);
/* create child process */
switch (fork())
{
case -1:/* error */
perror("fork - can't create process");
break;
case 0 :/* child process */
close(1); //close standard output
close(fd[0]); //write-only pipe
dup(fd[1]); //duplicate fd[1]
/* execute ls command */
if (!fork()) execlp("ls", "ls", NULL);
else
{
wait();
close(fd[1]);
}
break;
default:/* parent process */
close(0); //close standard input
close(fd[1]); //read-only pipe
dup(fd[0]); //dupliactate fd[0]
/* execute wc command */
if (!fork()) execlp("wc", "wc", NULL);
else
{
wait();
close(fd[0]);
}
}
}
|
|
Named pipe (FIFO queue) |
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fd;
/* make named pipe (FIFO) */
mkfifo("fifo", 0600);
/* create child process */
switch (fork())
{
case -1:/* error */
perror("fork - can't create process");
break;
case 0 :/* child process */
close(1); //close standard output
fd = open("fifo", O_WRONLY); //open named pipe (FIFO)
dup(fd); //duplicate fd
/* execute ls command */
if (!fork()) execlp("ls", "ls", NULL);
else
{
wait();
close(fd);
}
break;
default:/* parent process */
close(0); //close standard input
fd = open("fifo", O_RDONLY); //open named pipe (FIFO)
dup(fd); //dupliactate fd
/* execute wc command */
if (!fork()) execlp("wc", "wc", NULL);
else
{
wait();
close(fd);
unlink("fifo");
}
}
}
|
August, 23rd 2006
© Michał Kalewski