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

How to send a variable between two C programs

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

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

Fork xyz.c 并使用 execvp() 将此 transferme 传递给 jkl.c [事实证明 execvp 将只接受二进制可执行文件或 shell 脚本的路径。]

发生的事情是,

  1. execvp()不传递变量,需要const char *作为参数的类型
  2. 传递二进制可执行文件的路径不起作用。 [我尝试了一个简单的分叉和 execvp,但没有尝试传递变量。]

有人可以吗:

  1. 告诉我在这种情况下如何使用 execvp()?二进制可执行文件位于主文件夹中,假设路径为 /home/user/jkl.o
  2. 告诉我如何将这个变量传递给其他程序?

我试着研究 pipe,但我更加困惑了。

编辑:我的意思是jkl.out

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

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

再看看execl()的man :

The const char *arg and subsequent ellipses in the execl(), execlp(), and execle() functions can be thought of as arg0, arg1, ..., argn. Together they describe a list of one or more pointers to null-terminated strings that represent the argument list available to the executed program. The first argument, by convention, should point to the filename associated with the file being executed. The list of arguments must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (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);