【发布时间】:2014-06-10 18:47:53
【问题描述】:
我正在尝试执行我从另一个程序编写的程序(我们称之为 program2)。
我编译 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);
}
}
【问题讨论】:
-
程序为什么会失败?检查错误号。
-
程序在“没有这样的文件或目录”中失败
-
给我们一个
strace -s 200 -f -o ./program1输出... -
您的 PATH 中是否有一个名为
client的程序? -
客户端是一个可执行文件,位于当前程序(试图运行该程序的程序)的同一目录中,我需要添加什么路径?以及如何?
标签: c linux operating-system exec fork