1

これがクライアントプログラムの私のコードの一部です

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

エラーはありませんが、送信したものを取得できません。変なものが印刷されます。

4

1 に答える 1

2

いいえ、あなたがすることはできません。

を送信できますchar*が、受信プロセスは通常、送信プロセスのメモリにアクセスできず、メモリのマッピングが異なる場合があります。受信したポインタが指すメモリ アドレスにアクセスすると、結果は未定義です (つまり、プラットフォーム固有であり、必ずしも繰り返し可能であるとは限りません)。最も可能性の高い結果は、何らかのメモリ保護エラーか、読み取りメモリにランダムな値が含まれていることです。

于 2013-04-19T09:37:03.210 に答える