This is a comprehensive guide to interprocess communication.
Today's lesson is on piping. You have process A, and process B, created by using the fork() command. You want the output of process A to be the input to process B. This is called piping. The following code excerpt demonstrates Inter Process Communication between two child processes, Process A, and Process B. Process A and Process B are running shell commands.
Code:
int pipeID[2]; /* Pipes Have two values, one for the process A */
/* And one for process B. Think of each value */
/* as an end to the pipe */
/* pipeid[0] is process A, pipeid[1] is process B */
pipe(pipeID); /* Create Pipe. */
/* Fork current process to create process A and process B. */
/*Both child processes. Process A is created by the first fork(), */
/*process B by the second fork(). */
// Process A code
if (fork()==0){ /* If the new process A is a child */
// child
close(pipeID[0]); //write stdout
dup2(pipeID[1],1); // to pipe using dup
fillArgs(sPipe[0],&args); /* Create agrc and argv */
execvp(args.argv[0],args.argv); // Execute
close(pipeID[1]);// stdout goes to pipe.
}
// Process B code
if (fork()==0){ /* If the new process is a child */
close(pipeID[1]); //read from pipe 1 stdout
dup2(pipeID[0],0); //as stdin.
fillArgs(sPipe[1],&args2); /* Create argc and argv */
execvp(args2.argv[0],args2.argv); // Execute
close(pipeID[0]);// process B reads stdin from pipe
}
close(pipeID[1]); /* Close pipes else, we don't want to have stdin, and stdout */
close(pipeID[0]); /* permanently redirected. */
I know my example isn't easy. At least I gave it a try
Last edited by flyingpenguin; 11-02-2005 at 10:51 PM..
Reason: Indenting Code
This is a comprehensive guide to interprocess communication.
Today's lesson is on piping. You have process A, and process B, created by using the fork() command. You want the output of process A to be the input to process B. This is called piping. The following code excerpt demonstrates Inter Process Communication between two child processes, Process A, and Process B. Process A and Process B are running shell commands.
Code:
int pipeID[2]; /* Pipes Have two values, one for the process A */
/* And one for process B. Think of each value */
/* as an end to the pipe */
/* pipeid[0] is process A, pipeid[1] is process B */
pipe(pipeID); /* Create Pipe. */
/* Fork current process to create process A and process B. */
/*Both child processes. Process A is created by the first fork(), */
/*process B by the second fork(). */
// Process A code
if (fork()==0){ /* If the new process A is a child */
// child
close(pipeID[0]); //write stdout
dup2(pipeID[1],1); // to pipe using dup
fillArgs(sPipe[0],&args); /* Create agrc and argv */
execvp(args.argv[0],args.argv); // Execute
close(pipeID[1]);// stdout goes to pipe.
}
// Process B code
if (fork()==0){ /* If the new process is a child */
close(pipeID[1]); //read from pipe 1 stdout
dup2(pipeID[0],0); //as stdin.
fillArgs(sPipe[1],&args2); /* Create argc and argv */
execvp(args2.argv[0],args2.argv); // Execute
close(pipeID[0]);// process B reads stdin from pipe
}
close(pipeID[1]); /* Close pipes else, we don't want to have stdin, and stdout */
close(pipeID[0]); /* permanently redirected. */
I know my example isn't easy. At least I gave it a try
Well, this was kinda fun and different:
You Want to Spend Time with Friends and Family a UNIX.com Cartoon Explainer
https://youtu.be/6jPDpuxI2OA
You want to spend time with friends and family.
But you are stuck on some problem...
Your Linux or Unix code is buggy and you don't know... (1 Reply)
As a mind refresher, I was thinking to start a new thread for ONE LINERS....funny/weird or any technical one liners....
Let me start first......
=================================
#!/bin/ssh
#The Unix Guru's View of Sex
unzip ; strip ; touch ; grep ; finger ; mount ; fsck ; more ; yes ;... (3 Replies)
hello friends ........
i want to visit the directory recusvely through and shell script . and want to get the output of " stat " command for each file .i tried by this way but unable to visit the each file .
#!/bin/bash
echo "enter the file name"
read file
fun()
... (3 Replies)
hi friend i am facing problem in taking input from a file to the variable ..
read fname
if
then
cd $fname
pwd
ls > new_temp1
cat new_temp1
fi
terminal=`tty`
exec < $new_temp1
while read line
do
echo $line
done
exec < $terminal (2 Replies)
i have been in trouble please help me out
i have developed a message queue.it is a simple message queue program
after running it give error like NO SPACE LEFT ON DEVICE
what is this error
how could i solve this problem i am working on solaris9.2 (2 Replies)