05-14-2008
can you please tell me the syntax?
According to the code above, am already reading from the pipe after exec'ing program B. Can you please point in code if I had done anything wrong?
Thanks,
Vivek
Last edited by vvaidyan; 05-14-2008 at 05:01 PM..
10 More Discussions You Might Find Interesting
1. Programming
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)
Discussion started by: vvaidyan
1 Replies
2. Programming
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)
Discussion started by: vvaidyan
2 Replies
3. Shell Programming and Scripting
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)
Discussion started by: fed.linuxgossip
2 Replies
4. UNIX for Dummies Questions & Answers
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)
Discussion started by: vvaidyan
3 Replies
5. UNIX for Advanced & Expert Users
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)
Discussion started by: vigsgb
6 Replies
6. AIX
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)
Discussion started by: need2bageek
0 Replies
7. UNIX for Dummies Questions & Answers
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)
Discussion started by: RoshniMehta
0 Replies
8. Programming
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)
Discussion started by: chris01010
7 Replies
9. Programming
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)
Discussion started by: NiGHTS
0 Replies
10. Programming
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)
Discussion started by: Abhishek_kumar
1 Replies
PIPE(2) BSD System Calls Manual PIPE(2)
NAME
pipe, pipe2 -- create descriptor pair for interprocess communication
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
int
pipe(int fildes[2]);
int
pipe2(int fildes[2], int flags);
DESCRIPTION
The pipe() system call creates a pipe, which is an object allowing bidirectional data flow, and allocates a pair of file descriptors.
The pipe2() system call allows control over the attributes of the file descriptors via the flags argument. Values for flags are constructed
by a bitwise-inclusive OR of flags from the following list, defined in <fcntl.h>:
O_CLOEXEC Set the close-on-exec flag for the new file descriptors.
O_NONBLOCK Set the non-blocking flag for the ends of the pipe.
If the flags argument is 0, the behavior is identical to a call to pipe().
By convention, the first descriptor is normally used as the read end of the pipe, and the second is normally the write end, so that data
written to fildes[1] appears on (i.e., can be read from) fildes[0]. This allows the output of one program to be sent to another program: the
source's standard output is set up to be the write end of the pipe, and the sink's standard input is set up to be the read end of the pipe.
The pipe itself persists until all its associated descriptors are closed.
A pipe that has had an end closed is considered widowed. Writing on such a pipe causes the writing process to receive a SIGPIPE signal.
Widowing a pipe is the only way to deliver end-of-file to a reader: after the reader consumes any buffered data, reading a widowed pipe
returns a zero count.
The bidirectional nature of this implementation of pipes is not portable to older systems, so it is recommended to use the convention for
using the endpoints in the traditional manner when using a pipe in one direction.
RETURN VALUES
The pipe() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate
the error.
ERRORS
The pipe() and pipe2() system calls will fail if:
[EMFILE] Too many descriptors are active.
[ENFILE] The system file table is full.
[ENOMEM] Not enough kernel memory to establish a pipe.
The pipe2() system call will also fail if:
[EINVAL] The flags argument is invalid.
SEE ALSO
sh(1), fork(2), read(2), socketpair(2), write(2)
HISTORY
The pipe() function appeared in Version 3 AT&T UNIX.
Bidirectional pipes were first used on AT&T System V Release 4 UNIX.
The pipe2() function appeared in FreeBSD 10.0.
BSD
May 1, 2013 BSD