Memory 使用exec()调用另一个程序

Memory 使用exec()调用另一个程序,memory,exec,fork,shared,Memory,Exec,Fork,Shared,我想使用另一个使用c中exec函数的程序。实际上,在fork之后,我想在child中创建随机数,并使用共享内存发送给parent。但每当我使用exec函数时,我都会出现这个错误,下面是我的代码: int shmid; shmid = shmget(key, 80,0700|IPC_CREAT); ptr = (int *) shmat (shmid, NULL , 0); i=fork(); if(i==0) { printf("1"); exec("p2","p2

我想使用另一个使用c中exec函数的程序。实际上,在fork之后,我想在child中创建随机数,并使用共享内存发送给parent。但每当我使用exec函数时,我都会出现这个错误,下面是我的代码:

    int shmid;

shmid = shmget(key, 80,0700|IPC_CREAT);
ptr = (int *) shmat (shmid, NULL , 0); 
i=fork();

if(i==0)
{
    printf("1");
    exec("p2","p2",shmid);
}
else if(i>0)
{
    printf("anam");
}
else
{
    exit(1);
}
p1.c:31:24:警告:从不同大小的整数转换为指针[-Wint到指针转换] p1.c:31:3:警告:函数调用中缺少哨兵[-Wformat]

所以我的问题是,我如何使用exec-only编写程序名作为参数

没有
exec
标准函数。我想你指的是
execl
,在这种情况下应该是:

execl("/full/path/to/p2", "p2", shmid_to_string, NULL);

要将
shmid
转换为字符串,您可以使用
snprintf

为什么不添加“C”标记,以便C程序员看到它?这里没有
exec
之类的东西。要问一个问题,尤其是如此复杂的问题,最好创建一个“否则-例如-我们无法分辨“哪是第31行?”,“您包含了哪些标题?”我明白了。但我只需要使用程序名,而不需要使用程序名path@user3609616然后,也许可以尝试执行
execlp
execl("/full/path/to/p2", "p2", shmid_to_string, NULL);