如何在两个C程序之间发送变量

时间:2015-05-06 08:22:20

标签: c pipe exec fork argument-passing

我有一个C程序,xyz.c可以对某个变量进行一些计算,比如transferme。我想将此变量/传递给另一个C程序,比如说jkl.c

我一直在努力做到以下几点:

分叉 xyz.c并使用 execvp()将此transferme传递给jkl.c的可执行文件[结果显示execvp只接受路径到二进制可执行文件或shell脚本。]

发生的事情是,

  1. execvp()不传输变量,需要const char *作为参数的类型。
  2. 将路径传递给二进制可执行文件不起作用。 [我尝试了一个简单的forking和execvp,而没有尝试传递变量。]
  3. 有人可以请:

    1. 告诉我如何在这种情况下使用 execvp()?二进制可执行文件位于主文件夹中的位置,例如路径为/home/user/jkl.o
    2. 告诉我如何将此变量传递给其他程序?
    3. 我试着调查pipe,但我更加困惑。

      编辑:我的意思是jkl.out

1 个答案:

答案 0 :(得分:0)

您有多种方法可以将数据传输到另一个程序。 (pipin',文件等等。我可以稍后编辑我的答案,并提供一个关于在两个C程序之间发送数据的更标准指南,如果有必要的话) 让我们看看你的案例execl()

我们必须首先同意程序jkl.o将由您的主程序启动,并将接收包含该参数的字符串作为其start参数。

让我们看看execl()的人:

  

execl(),execlp()中的const char * arg和后续省略号,   和execle()函数可以被认为是arg0,arg1,...,argn。   他们一起描述了一个或多个指针的列表   以null结尾的字符串,表示可用的参数列表   执行的程序。按惯例,第一个论点应该指出   到与正在执行的文件关联的文件名。清单   参数必须由NULL指针终止,因为它们是   可变参数函数,必须将此指针强制转换为(char *)NULL。

行。所以你首先要给execl()你的路径,然后在每一行中给一个参数。你指出你需要分叉,这是真的。所以,让我们这样做,我们分叉,然后我们发送一个包含你的transferme的字符串。我将假设这个变量是一个常规字符串。

 child_pid = fork() 
/* fork() == 0 for child process */

   if(child_pid == 0)
   {  
      /*executing  jkl.o */
      execl("/home/user/a.out", "a.out" , transferme);  /* with a.out being your second program, you can change that to whatever you'd want*/
   }
/* parent stuff*/

这应该可以解决问题。

[评论更新:]

我忘了argv[0](即execl的第二个参数必须是程序本身的名称。),所以试试

execl("/home/user/d.out", "d.out", transferme, (char*) NULL);