#include
#include
#include
#include
#include
#include
#include
#define BUFSZ 512
struct message{
long msg_type;
char msg_text[BUFSZ];
};
int main(){
int qid, msgsnd_fd, msgrcv_fd, msgctl_fd;
key_t key;
int len;
struct message msg;
char *ret;
/*creat "key"*/
key = ftok(".", 'a');
printf("returned value of ftok() is: %d\n", key);
if(key == -1){
perror("ftok");
exit(1);
}
/*creat message queue*/
qid = msgget(key, IPC_CREAT|0666);
printf("returned value of msgget() is: %d\n", qid);
if(qid == -1){
perror("msgget");
exit(1);
}
printf("open queue\n");
puts("Please enter the message to queue:");
ret = fgets((&msg)->msg_text, BUFSZ, stdin);
printf("ret = %d\n", *ret);
if(ret == NULL){
puts("no message");
exit(1);
}
msg.msg_type = getpid();
printf("msg.msg_type = %ld\n", msg.msg_type);
len = strlen(msg.msg_text);
printf("len = %d\n", len);
/*add message to message queue*/
msgsnd_fd = msgsnd(qid, &msg, len, 0);
printf("returned value of msgsnd() is: %d\n", msgsnd_fd);
if(msgsnd < 0){
perror("msgsnd");
exit(1);
}
/*read message queue*/
msgrcv_fd = msgrcv(qid, &msg, BUFSIZ, 0, 0);
printf("returned value of msgrcv() is: %d\n", msgrcv_fd);
if(msgrcv_fd < 0){
perror("msgrcv");
exit(1);
}
printf("message is: %s", (&msg)->msg_text);
/*delete message queue*/
msgctl_fd = msgctl(qid, IPC_RMID, NULL);
printf("returned value of msgctl() is: %d\n", msgctl_fd);
if(msgctl_fd < 0){
perror("msgctl");
exit(1);
}
exit(0);
}
Linux進程間通信-消息隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.