How to clear the content of a pipe (STDIN) after it is written to another program?
PROGRAM A <-> PROGRAM B
PROGRAM A sends data as STDIN ro PROGRAM B and when PROGRAM B is executed from PROGRAM A, it sends output back to PROGRAM A. This is implemented using 2 pipes (fd1 & fd2).
The above process happens in a loop and during the second run, the previous data that had been written as STDIN to PROGRAM B, it does not get cleared. The input data on STDIN to PROGRAM B just gets overwritten and the extra characters just stay there.
How to clear the STDIN to PROGRAM B? Existing code as follows:
PROGRAM A
The PROGRAM A code shown above is in a while condition loop, which can run more than once not exiting the program.
PROGRAM B
Just to check if correct data is got as input to PROGRAM B, we are just reading STDIN and echoing back on STDOUT. Previous data (without PROGRAM A exiting) stays on STDIN of PROGRAM B, which needs to be cleared before writing new input data to STDIN of PROGRAM B.
Thanks for the reply shamrock, but it is not solving the problem.
I am able to read the output of PROGRAM B inside PROGRAM A through char line[]. I am receiving output. But the problem is, the output in the previous run (until program exited) is not getting erased. Able to see new run results overwritten on previous results through char line[] of PROGRAM A AFTER read(fd2[0], line, MAXLINE).
The process needs to read() data off the pipe in order to clear it otherwise it blocks and stays in the pipe. Invoke read() after exec'ing program B in the child process.
Explain your program...does program A have a main() like program B does or is it common to both A and B. I don't understand what's going on unless you provide more details.
Shamrock, sorry about not providing proper details previously.
Program A does have main() fn separately. Program A and B are completely two different programs, just that Program B is called through execl() in Program A.
Following are additional details on Program A.
PROGRAM A
Function StartPipe() is as given in the first post.
Hello friends! i am writing a code in which i take inputs (numbers) from user and count the total number of positive, negative and zeros entered. I need to clear my standard input buffer before scanf() command. My compiler is completely ignoring the fflush(stdin) command. its not even showing any... (1 Reply)
Subject: Debugging a program written in two languages
Platform: Linux (Kubuntu)
I am trying to debug a C application with bindings to some simple functions written in Ada using the GNAT Programming Studio IDE (GPS). The main entry point is in C. The debugger is gdb.
I managed to compile... (0 Replies)
Hi,
Hopefully someone can help.
We have a process that writes a file using Connect Direct to our local Solaris server and then our C++ program will pick up the file and process it. Unfortunately, because of the size of the file, the C++ program is processing the file before it has finished... (7 Replies)
We use SAP application cluster on AIX. Communication between 2 of its instances is failing randomly with the following error:
java.net.SocketException: There is no process to read data written to a pipe.
The above error causes a cluster restart if an important communication fails.
Can... (0 Replies)
Hi Everyone,
The machine I'm working on is an AIX 5.3 LPAR running on a P650. oslevel -r shows 5300-08. I'm trying to take a backup to a SCSI tape drive, which has been working up until this point. I know of nothing that has changed recently to cause this problem. But when I try to take a... (0 Replies)
I have the following code which works on AIX 4.3 but fails at times on AIX 5.3
with:
cat: 0652-054 cannot write to output. There is no process to read data written to a pipe.
validator="${validator_exe} ${validator_parms}"
cmd_line="${CAT} ${data_file} | ${validator}... (6 Replies)
Hi,
Program A: uses pipe()
I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using:
* child
-> dup2(fd, STDOUT_FILENO);
-> execl("/path/PROGRAM B", "PROGRAM B", NULL);
* parent
-> char line;
-> read(fd, line, 100);
Question:
---------... (3 Replies)
Hello,
I have a script that monitors files uploaded via ftp. After a successful upload, the file name is written to the pipe.
There is another program that reads this pipe and allows automatically run any program or script ( say test.sh ) to process the newly uploaded file.
cat test.sh... (2 Replies)
Hi,
Program A: uses pipe()
I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using:
* child
-> dup2(fd, STDOUT_FILENO);
-> execl("/path/PROGRAM B", "PROGRAM B", NULL);
* parent
-> char line;
-> read(fd, line, 100);
Question:... (2 Replies)
Hi,
Program A: uses pipe()
I am able to read the stdout of PROGAM B (stdout got through system() command) into PROGRAM A using:
* child
-> dup2(fd, STDOUT_FILENO);
-> execl("/path/PROGRAM B", "PROGRAM B", NULL);
* parent
-> char line;
-> read(fd, line, 100);
Question:
---------... (1 Reply)