Sponsored Content
Top Forums Programming How to clear the content of a pipe (STDIN) after it is written to another program? Post 302195285 by vvaidyan on Wednesday 14th of May 2008 05:28:11 PM
Old 05-14-2008
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

Code:
int
main(int argc, char *argv[])
{
     // This program accepts several customized options through socket.
     // The option/module I am writing is called SearchFiles
     // This program does not exit until another option Terminate is called through client socket
     // Meaning, SearchFiles option can be called more than once
     // SearchFiles does operation nothing to do with pipes. it does a customized path translation. 
     // The data that it passes to StartPipe() method is only the socket and the path in a char array as below:

     sockinetbuf s;
     string socket_data;
     s >> socket_data;
     while(s)
     {
          s >> socket_data;

          if (socket_data == "SearchFiles")
          {
               char input_to_program_b[1000] = "blah blah blah";
               StartPipe(s, input_to_program_b);
          }
          else if (socket_data == "Terminate")
          {
               exit(0);
          }
     }
}

Function StartPipe() is as given in the first post.

Thanks,
Vivek

Last edited by vvaidyan; 05-14-2008 at 06:35 PM..
 

10 More Discussions You Might Find Interesting

1. Programming

How to write to stdin of another program (program A -> [stdin]program B)

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

C++ How to use pipe() & fork() with stdin and stdout to another program

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

Perform action file name written to the pipe

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

How to write to stdin of another program (program A -> [stdin]program B)

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

AIX 5.3 - There is no process to read data written to a pipe

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

Tape drive problem - no process to read data written to a pipe

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

No process to read data written to a pipe on AIX

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

How to prevent a C++ program reading a file that is still being written to.?

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

Debugging a program written in two languages

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

Clear standard input buffer for C program in Linux

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
EXECL(3)						     Library Functions Manual							  EXECL(3)

NAME
execl, execv, execle, execlp, execvp, exec, environ - execute a file SYNOPSIS
#include <unistd.h> int execl(const char *name, const char *arg0, ..., (char *) NULL) int execv(const char *name, char *const argv[]) int execle(const char *name, const char *arg0, ..., (char *) NULL, char *const envp[]) int execlp(const char *name, const char *arg0, ..., (char *) NULL) int execvp(const char *name, char *const argv[]) extern char *const *environ; DESCRIPTION
These routines provide various interfaces to the execve system call. Refer to execve(2) for a description of their properties; only brief descriptions are provided here. Exec in all its forms overlays the calling process with the named file, then transfers to the entry point of the core image of the file. There can be no return from a successful exec; the calling core image is lost. The name argument is a pointer to the name of the file to be executed. The pointers arg[0], arg[1] ... address null-terminated strings. Conventionally arg[0] is the name of the file. Two interfaces are available. execl is useful when a known file with known arguments is being called; the arguments to execl are the char- acter strings constituting the file and the arguments; the first argument is conventionally the same as the file name (or its last compo- nent). A null pointer argument must end the argument list. (Note that the execl* functions are variable argument functions. This means that the type of the arguments beyond arg0 is not checked. So the null pointer requires an explicit cast to type (char *) if not of that type already.) The execv version is useful when the number of arguments is unknown in advance; the arguments to execv are the name of the file to be exe- cuted and a vector of strings containing the arguments. The last argument string must be followed by a null pointer. When a C program is executed, it is called as follows: int main(int argc, char *const argv[], char *const envp[]); exit(main(argc, argv, envp)); where argc is the argument count and argv is an array of character pointers to the arguments themselves. As indicated, argc is convention- ally at least one and the first member of the array points to a string containing the name of the file. Argv is directly usable in another execv because argv[argc] is 0. Envp is a pointer to an array of strings that constitute the environment of the process. Each string consists of a name, an "=", and a null-terminated value. The array of pointers is terminated by a null pointer. The shell sh(1) passes an environment entry for each global shell variable defined when the program is called. See environ(7) for some conventionally used names. The C run-time start-off routine places a copy of envp in the global cell environ, which is used by execv and execl to pass the environment to any subprograms executed by the current program. Execlp and execvp are called with the same arguments as execl and execv, but duplicate the shell's actions in searching for an executable file in a list of directories. The directory list is obtained from the environment variable PATH. Under standard Minix, if a file is found that is executable, but does not have the proper executable header then it is assumed to be a shell script. Execlp and execvp exe- cute /bin/sh to interpret the script. Under Minix-vmd this does not happen, a script must begin with #! and the full path name of the interpreter if it is to be an executable script. SEE ALSO
execve(2), fork(2), environ(7), sh(1). DIAGNOSTICS
If the file cannot be found, if it is not executable, if it does not start with a valid magic number (see a.out(5)), if maximum memory is exceeded, or if the arguments require too much space, a return constitutes the diagnostic; the return value is -1 and errno is set as for execve. Even for the super-user, at least one of the execute-permission bits must be set for a file to be executed. 4.2 Berkeley Distribution April 25, 1986 EXECL(3)
All times are GMT -4. The time now is 08:11 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy