我正在尝试编译 2 个可执行文件。其中一个是采样器,另一个是收集器。采样器必须从收集器的子代中调用。采样器一将一些数据写入共享内存,收集器应从共享内存中读取数据。我正在使用 execlp 调用 Sampler,但我认为我做错了什么。它没有用下面的代码写任何东西。但是当我手动执行采样器时,它会将数据写入共享内存,然后当我执行收集器时,它可以正确读取数据。不久 execlp 函数不会正确调用采样器。为什么?
pid = fork();
if (pid == 0) {
execlp("/home/gizux/Belgeler/ogr1grp14pro2/Sampler1","/home/gizux/Belgeler/ogr1grp14pro2/Sampler1", ShmID, NULL);
exit(0);
}
else
{
//collector codes come here
}
如果我不使用 execlp() 并将 Sampler 的代码放在那里,它就可以工作。
pid = fork();
if (pid == 0) {
ShmID = shmget(55667, 4*sizeof(int), IPC_CREAT | 0666);
if (ShmID < 0) {
printf("*** shmget error (server) ***\n");
exit(1);
}
ShmPTR = (int *) shmat(ShmID, NULL, 0);
if ((int) ShmPTR == -1) {
printf("*** shmat error (server) ***\n");
exit(1);
}
int random;
random = rand()%100+1;
ShmPTR[0] = r;
ShmPTR[1] = random;
r++;
random = 0;
printf("Sampler has filled %d %d in shared memory...\n",
ShmPTR[0], ShmPTR[1]);
exit(0);
}
else
{
//collector codes come here
}