리눅스에서 사용하는 소켓 프로그래밍 관련된 내용입니다.
출처 : 교수님.. ㅋ
#include
#include
#include
#include
#include
#include
#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;
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 read... process message..! waiting..\n", getpid());
nbytes = msgrcv(qid, &rmsg, BUFSZ, getpid(), 0);
printf("recv = %d bytes \n", nbytes);
printf("type = %ld \n", rmsg.msg_type);
printf("Received process 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_text, 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;
}