Create two named pipes with mkfifo("pipename", 0660);
Open them with
Be sure to open them in the same order in both processes. When you open the pipe for read in one, it will wait for the other process to open it for write before finishing.
Write to it with write(fd, buffer, size), read from it with read(fd, buffer, size)
Thank you for the help. But i have another issue now.
I open a FIFO to write
now how do I write argv[1] to pipe1?
I did:
when I run my program with an argument, it doesnt do anything. I have to hit ctrl+C to stop.
Any help!!
Last edited by vbe; 11-18-2011 at 11:05 AM..
Reason: Use code tags for your code!!!!
0777 gives the entire world read, write, and execute permissions to your fifo, and it doesn't even make sense to execute a fifo. I suggest you try the permissions I suggested, 0660, a better generic number than 777.
Quote:
now how do I write argv[1] to pipe1?
I did:
write (writefd, argv[1], BUF_PIPE);
What in the world is BUF_PIPE? I can't find it in any include files.
argv[1] can vary in length, yes? If you don't have BUF_PIPE bytes in argv[1], you shouldn't use BUF_PIPE bytes from it. That would go beyond the end of the string and either send garbage or crash. (Or if BUF_PIPE is less, it'd only send part of the string.)
Since it's an ordinary NULL-terminated string, we can use strlen() to measure how long it is.
Also remember that, like I said, named pipes wait for the other side to open them. If the other half of your program isn't going, it will wait for it. This is normal.
Also remember that, because of that, if you open the pipes in the wrong order, they will still wait for each other forever even when you run both. If they both try to open their own write-ends without the other process opening the read-end first, they'll be stuck.
All of this is only a guess because you didn't actually post your program, please do.
I am sorry, I meant to write PIPE_BUF instead of BUF_PIPE. and PIPE_BUF is in limits.h
Anyway, I am still not getting it. Here is all my scratch work
This is progA.c. progA gets an integer from argv[1] and writes it to pipe1. That progB reads.
And here is progB that reads integer from pipe1, if positive integer then adds 10 to it and writes it to pipe2. And progA has to read pipe2.
ProgB
In my scratch work all I am trying to do is progA reads integer from argv[1], write it to pipe1 and pipe1 is read by progB and prints. So that I can understand the concept better.
I am looking at a lot of resources online and in my book but I cant put everything together. And how do I execute my programs?
Ok, I can't seem to figure this out or find anything on the web about this.
I'm on Sun Solaris, UNIX.
I have the following test script:
#!/bin/ksh
touch test.file
LOG=./tmp.log
rm -f ${LOG}
PIPE=./tmp.pipe
mkfifo ${PIPE}
trap "rm -f ${PIPE}" EXIT
tee -a ${LOG} < ${PIPE} &
... (17 Replies)
Hi,
I am getting data into a Named pipe. Does Named pipe have any size restriction; I know it does not have any storage and it just passes on the data to the next process.
I want to know, if there will be a difference in the Named pipe performance if the data input is more. (I am using DB2... (1 Reply)
Hi,
I want to use a Named pipe to get input from a growing file for further processing. When I prototype this scenario using a while loop, the data is not written to the named pipe.
This the script I use to get data into the Named pipe:
#!/bin/ksh
mkfifo pipe
while (( n <= 10 ))
do
echo... (2 Replies)
I would like to pipe (redirect ? - what is the right term?) the output of my script to a file named with the current date.
If I run this at a command prompt:
date +'%Y%m%d"
...it returns "20110429"
OK, that's good... so I try:
./script.sh > "'date +%Y%m%d'.csv"
I get a file... (1 Reply)
I did
cat < myFile >> myPipe
I was hoping that if I did ls -l, myPipe would now be holding the contents of myFile, and would be the same size. But it was 0.
Also strange was that when I did the command above, cat did not return control back to the shell. Why?
thanks (4 Replies)
I want to copy the contents of a named pipe to a file. I have tried using:
cat pipe.p >> transcript.log
but I have been unsuccessful, any ideas? (4 Replies)
Gurus,
I've a File Transaction Server, which communicates with other servers and performs some processing.It uses many Named PIPE's.
By mistake i copied a named PIPE into a text file.
I heard that PIPE files shouldn't be copied.Isn't it?
Since it's a production box, i'm afraid on... (2 Replies)
Hey folks,
i need communicate between 2 processes in a reliable manner. The information delivery has to be guarenteed. I thought about proc 2 sending a signal to proc 1 when information has being written to disc and wirte() has been verified (sync/flush). The IPC method for the data is named... (4 Replies)
Hi All,
I am facing a vague issue while trying to make two process talk to each
other using named pipe.
read process
=========
The process which reads, basically creates FIFO using
mkfifo - ret_val = mkfifo(HALF_DUPLEX, 0666) func.
It then opens the pipe using open func - fd = open... (2 Replies)
Hi All,
I am facing a vague issue while trying to make two process talk to each
other using named pipe.
read process
=========
The process which reads, basically creates FIFO using
mkfifo - ret_val = mkfifo(HALF_DUPLEX, 0666);) func.
It then opens the pipe using open func - fd =... (1 Reply)