我可以将带有sigqueue的char *发送到另一个进程

时间:2013-04-19 08:20:38

标签: c signals sigqueue

以下是我在客户端程序中的代码的一部分

      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);
      }

没有错误,但我无法得到我发送的内容。它打印出一些奇怪的东西。

1 个答案:

答案 0 :(得分:1)

不,你不能。

您可以发送char*,但接收过程通常无法访问发送过程的内存,并且内存可能会以不同方式进行映射。当您访问接收指针指向的内存地址时,结果是未定义的(即平台特定且不一定可重复)。 最可能的结果是某种内存保护错误或读取内存包含随机值。