我正在尝试执行我从其他程序编写的程序(让我们调用那个程序2)。
我编译program2并具有可执行文件调用client
。
我想运行program2,为此我创建了进程fork
,试图使用exec
函数执行program2。
该程序需要运行两个参数。
我用:
execvp("client",arguments)
其中arguments
是NULL
- 已终止的char*
- 数组,而arguments[0]
是"client"
。该程序在exec
操作失败,错误为No Such File Or Directory
。
换句话说,如何使用exec
函数从其他程序运行我的代码?
代码:
int main(int argc,char * argv []) {
struct Integrals* shm_ptr;
key_t key;
int i,status;
int shm_id;
pid_t pid;
int child_pid[PROCESS];
char curPid[10];
int curpid;
double calcSegment[SIZE];
int from,to;
double segment;
curpid=getpid();
sprintf(curPid,"%d",curpid);
char* arguments[]={"client",argv[1],curPid,NULL};
signal(SIGUSR1, sig_handler);//"install" the 'sig_handler' func in case ^C signl.
printf("---------->%s",arguments[0]);
key=ftok("\tmp",(char)argv[1][0]);
if( (shm_id=shmget(key,sizeof(Integrals),IPC_CREAT|0600))==-1)
{
perror("Fail To Allocate Shared Memory");
exit(1);
}
if((shm_ptr=(Integrals*)shmat(shm_id,NULL,0))<0)
{
perror("Fail To Attach Memory");
exit(1);
}
pid=fork();
if(pid<0)
{
perror("The Fork Failed");
exit(1);
}
else if(pid==0)
{
if(execvp("workspace/hafala/EX2/client",arguments)==-1)
{
perror("Faile To Execute 'client.c' Program");
exit(1);
}
}
答案 0 :(得分:0)
尝试使用完整路径而不仅仅是exec名称来调用外部程序。
这看起来像是一个非常简单的可执行文件重定位问题。
至少我会检查那里。另一种解决方案是将客户端应用程序移动到调用者的同一目录中,以更改当前目录上下文。
答案 1 :(得分:0)
我认为错误在第一个参数中,与您指定的程序不匹配
尝试将客户端可执行文件复制到同一目录,并将代码更改为此。
char* arguments[]={"./client",argv[1],curPid,NULL};
else if(pid==0)
{
if(execvp("./client",arguments)==-1)
{
perror("Failed To Execute 'client.c' Program");
exit(1);
}
}