0
에 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);
}
서버 프로그램에서 핸들러하지만 난입니다 클라이언트 프로그램 내 코드의 일부이다 내가 보낸 것을 얻을 수 없다. 이상한 것을 인쇄합니다.
서버 및 클라이언트 프로세스는 어떻게 작성합니까? – user2155932
동일한 pc와 2 개의 터미널 gcc -c server.c gcc -o serv server.o ./serv 클라이언트와 동일 – noname
프로세스 사이의 문자열에 포인터를 전달하고 있습니다. 문자열 데이터는 클라이언트의 주소 공간에 할당되며이 포인터는 서버의 주소 공간에서 유효하지 않습니다 (하나의 프로세스가 다른 프로세스에 의해'fork'를 사용하여 생성되는 경우, 그렇지 않을 수도 있습니다). 다른 IPC를 사용해야합니다. [this] (http://stackoverflow.com/questions/404604/comparing-unix-linux-ipc) 질문을 참조하십시오. – user2155932