我有 2 个进程 sigserver 和 sigclient。sigserver 等待信号到来,sigclient 将数据 (int+char) 发送到 sigserver。
sigserver.c
void sighand(int signo, siginfo_t *info, void *extra)
{
void *ptr_val = info->si_value.sival_ptr;
int int_val = info->si_value.sival_int;
printf("Signal: %d, value: [%d] %s\n", signo, int_val, (char*)ptr_val);
}
int main()
{
struct sigaction action;
action.sa_flags = SA_SIGINFO;
action.sa_sigaction = &sighand;
if (sigaction(SIGUSR2, &action, NULL) == -1) {
perror("sigusr: sigaction");
return 0;
}
printf("Signal handler installed, waiting for signal\n");
while(1) {sleep(2);}
return 0;
}
sigclient.c
int main(int argc, char *argv[])
{
union sigval value;
int pid = atoi(argv[1]);
value.sival_int = atoi(argv[2]);
value.sival_ptr = (void*) strdup(argv[3]);
if(sigqueue(pid, SIGUSR2, value) == 0) {
printf("signal sent successfully!!\n");
} else {
perror("SIGSENT-ERROR:");
}
return 0;
}
现在,当我使用以下命令运行客户端时 ./client server_pid 15 teststring
服务器生成核心转储。
我的问题是,一个进程如何读取另一个进程(不是子进程)发送的字符串。