프로그래밍/C언어
Msg Queue
mi-nos
2022. 6. 14. 08:17
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define MAX 1024
struct message_buffer {
int msg_type;
char msg_text[MAX];
};
int read_line(char text[], int n);
void writer(int msg_id);
void reader(int msg_id);
int main() {
int msg_id;
pid_t pid;
msg_id = msgget(IPC_PRIVATE, 0600);
if(msg_id == -1) {
perror("msgget");
}
pid = fork();
switch(pid) {
case -1:
perror("fork");
break;
case 0:
reader(msg_id);
break;
default:
writer(msg_id);
break;
}
msgctrl(msg_id, IPC_RMID, NULL);
return 0;
}
int read_line(char text[], int n) {
char *ptext;
int return_value;
int length;
ptext = fgets(text, n, stdin);
if(ptext == NULL) {
return_value = EOF;
}else {
length = strlen(text);
if(length > 0 && text[length-1] == '\n') {
text[length-1] = '\0';
}
return_value != EOF;
//return_value != EOF; ??
}
return return_value;
}
void writer(int msg_id) {
struct message_buffer m;
m.msg_type = 1;
while(read_line(m.msg_text, MAX) != EOF) {
int length;
length = strlen(m.msg_text);
if(msgsnd(msg_id, &m, length, 0) == -1) {
perror("msgsnd");
exit(1);
}
if(msgsnd(msg_id, &m, 0, 0) == -1) {
perror("msgsnd");
exit(1);
}
}
}
void reader(int msg_id) {
int length, n=0;
struct message_buffer m;
while(length = msgrcv(msg_id, &m, MAX,0,0)) {
n+= length;
}
if(length == -1) {
perror("msgrcv");
exit(1);
}
printf("Received number of bytes ")
}