【发布时间】:2013-04-12 14:12:13
【问题描述】:
这是我在客户端程序中的一部分代码
union sigval toServer;
char *test = "dummy";
serverPID = atol(buf2);
toServer.sival_ptr = (void *)test;
// Register to server
if (sigqueue(serverPID, SIGUSR1, toServer) == -1) { // register
fprintf(stderr," Server isn't ready!\n");
return 1;
}
这是我在服务器程序中的处理程序
static void register_handler(int signo, siginfo_t* info, void *context) {
registeredProgramID = info->si_pid;
if(info->si_value.sival_ptr != NULL)
fprintf(stderr," sent value is = %s \n" ,(char *)info->si_value.sival_ptr);
}
没有错误,但我无法收到我发送的内容。它打印出一些奇怪的东西。
【问题讨论】:
-
如何创建服务器和客户端进程?
-
在同一台电脑和 2 个终端上 gcc -c server.c gcc -o serv server.o ./serv 与客户端相同
-
您在进程之间传递指向字符串的指针。字符串数据在客户端的地址空间中分配,并且该指针在服务器的地址空间中无效(如果一个进程由另一个进程使用
fork生成,则可能是这样,但是,我发现情况并非如此)。您应该使用其他 IPC,请参阅this 问题。 -
嗯,我明白了。谢谢 :)。 fifo 是我的第二个选择。我认为这个更容易。