min's devlog
메시지 수신 프로세스 본문
지정한 프로세스에게 메시지를 전송하는 코드
파일명 : qsnd_pid.c
컴파일 : gcc -o qsnd_pid qsnd_pid.c
실행 : qsnd_pid 1234
#include<sys/types.h>
#include<sys/ipc.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#define BUFSZ 512
//메시지 내용 구조체 선언
typedef struct_msg{
long msg_type;
char msg_text[BUFSZ];
}msg_t ;
int main(int argc, char **argv){
pid_t pid;
int len, qid;
msg_t pmsg; //전송할 메시지
key_t key; //메시지 큐 key
if(argc != 2){
printf("USAGE : %s msqkey",argv[0]);
exit(EXIT_FAILURE);
}
key = atoi(argv[1]);
if((qid=msgget(key,IPC_CREAT|0600))<0){
perror("msgget");
exit(EXIT_FAILURE);
}
if((pid=fork())<0){
printf("fork fail");
exit(EXIT_FAILURE);
}
else if(pid>0){
int nbytes;
msg_t rmsg;
printf("\n%d 프로세스 메시지큐 읽기 대기중..\n"getpid());
nbytes=msgrcv(qid,&rmsg,BUFSZ,getpid(),0);
printf("recv=5d bytes \n",nbytes);
printf("type=%1d\n",rmsg.msg_type);
printf("수신 프로세스 PID=%d\n",getpid());
printf("value=%s\n",rmsg.msg_text);
msgctl(qid,IPC_RMID,0);
exit(EXIT_SUCCESS);
}
puts("Enter message to post : ");
if( fgets((&pmsg)->msg_test,BUFSZ,stdin)==NULL){
puts("no message to post");
exit(EXIT_FAILURE);
}
pmsg.msg_type=getppid();
len=strlen(pmsg.msg_text);
if((msgsnd(qid,&pmsg,len,0))<0){
perror("msgsnd fail");
exit(EXIT_FAILURE);
}
puts("message posted");
return 0;
}
'Linux > TCP IP Socket Programming' 카테고리의 다른 글
UDP 에코 서버 (0) | 2021.04.10 |
---|---|
파이프 기반의 프로세스간 통신 (0) | 2021.04.10 |
SIGCHLD, wait() (0) | 2021.04.09 |
alarm() 인터럽트 (0) | 2021.04.09 |
System Call 수행 중 함수 처리 (0) | 2021.04.09 |
Comments