Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UNIX run program within another program

Tags:

c

unix

I am trying to execute a program from within a C program (inside UNIX).

I have been given an executable ( the program requires a string input during execution and writes that input to another file called sample ) called exec and I want to execute it in program.c, but giving the string input through indirection.

For that I created a file as follows:

% vim input

I wrote the following inside the input file

content

Now in program.c,

#include<unistd.h>
int main()
{
      const char* command = "./exec < input";
      execvp(command, NULL);
      return 0;
}

When I run the program, the content is not entered into the sample file.

But when I run it without indirection, i.e.

const char* command = "./exec";

then it works, and input entered in saved in sample file.

Can someone please tell what am I doing wrong in the indirection syntax.

Thanks.

like image 382
Jake Avatar asked Aug 17 '26 08:08

Jake


1 Answers

The syntax you are using is supposed to be interpreted by a shell like bash, csh, ksh, etc.

The system call execvp only expects the path to the executable and a number of arguments, the shell is not invoked there.

To perform redirection in this manner, you'll have to use the dup2(2) system call before calling execvp:

int fd = open("input", O_RDONLY);
/* redirect standard input to the opened file */
dup2(fd, 0);
execvp("/path/to/exec", ...);

Of course, you'll need some additional error checking in a real-world program.

like image 84
Blagovest Buyukliev Avatar answered Aug 19 '26 14:08

Blagovest Buyukliev