Digital Stronghold - Software Engineering Blog




January 23, 2006

Unix half-duplex pipes

Filed under: Progressive Studies

The pipe ‘|’ is a type of inter-process communication. Its facilities provide a method for multiple processes to communicate with one another.

Simply putting a pipe in between is a method of connecting the standard output of one process to the standard input of another.

joset@kee$ ls -l | grep -i foo

In the example above, the output of ls is written to the input of grep. Obviously, the output of grep is written to the standard output of the shell, the screen.

Here is how a pipe works.

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
	
int main(void)
{
	int	fd[2], n_bytes;
	pid_t	child;
	char	string[] = "Hello, world!\n";
	char	readbuf[80];
	
	pipe(fd);
	
	if ((child = fork()) == -1){
		perror("fork");
		exit(1);
	}
	
	if ((child == 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 */
		n_bytes = read(fd[0], readbuf, sizeof(readbuf));
		printf("Received string: %s", readbuf);
	}
	return 0;
}

Comments »

The URI to TrackBack this entry is: http://eradicus.blogsome.com/2006/01/23/half-duplex-pipes/trackback/

No comments yet.

RSS feed for comments on this post.

Leave a comment

Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>



Anti-spam measure: please retype the above text into the box provided.

Theme designed by Joset Anthony Zamora


Digital Stronghold

↑ Get Headline Animator