我有一个二进制文件,其中包含一个用C语言编写的函数程序,如下所示:
int main()
{
int a, b;
foo(a,b);
return 0;
}
现在我想在另一个名为“solver”的程序中使用fork()和execve()执行该程序。
int main(int argc, char* argv[])
{
pid_t process;
process = fork();
if(process==0)
{
if(execve(argv[0], (char**)argv, NULL) == -1)
printf("The process could not be started\n");
}
return 0;
}
这是一个好方法吗?因为它编译,但我不确定“worker”程序中函数的参数是否接收到命令行传递给“求解器”程序的变量
答案 0 :(得分:1)
我相信你正在努力实现这样的目标:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/wait.h>
static char *sub_process_name = "./work";
int main(int argc, char *argv[])
{
pid_t process;
process = fork();
if (process < 0)
{
// fork() failed.
perror("fork");
return 2;
}
if (process == 0)
{
// sub-process
argv[0] = sub_process_name; // Just need to change where argv[0] points to.
execv(argv[0], argv);
perror("execv"); // Ne need to check execv() return value. If it returns, you know it failed.
return 2;
}
int status;
pid_t wait_result;
while ((wait_result = wait(&status)) != -1)
{
printf("Process %lu returned result: %d\n", (unsigned long) wait_result, status);
}
printf("All children have finished.\n");
return 0;
}
./ work将使用与原始程序相同的参数启动。