我有一个C程序,xyz.c
可以对某个变量进行一些计算,比如transferme
。我想将此变量/传递给另一个C程序,比如说jkl.c
。
我一直在努力做到以下几点:
分叉 xyz.c并使用 execvp()将此transferme
传递给jkl.c的可执行文件[结果显示execvp只接受路径到二进制可执行文件或shell脚本。]
发生的事情是,
const char *
作为参数的类型。有人可以请:
/home/user/jkl.o
我试着调查pipe
,但我更加困惑。
编辑:我的意思是jkl.out
答案 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);