| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #include "commMsgQueue.h"
- static int commMsgQueue(int flags)
- {
- key_t _key = ftok(PATHNAME,PROJ_ID);//ftok参数有两个,第一个是路径变量,第二个是projectID
- if(_key < 0){
- perror("ftok");
- return -1;
- }
- int msgid = msgget(_key,flags);
- if(msgid < 0){
- perror("msgget");
- return -2;
- }
- return msgid;
- }
-
- int creatMsgQueue()
- {
- return commMsgQueue(IPC_CREAT | IPC_EXCL|0666);
- }
-
- int getMsgQueue()
- {
- return commMsgQueue(IPC_CREAT);
- }
-
- int destroyMsgQueue(int msgid)
- {
- if(msgctl(msgid, IPC_RMID, NULL) < 0){
- perror("msgctl");
- return -1;
- }
- return 0;
- }
- int sendMsg(int msgid, int type, const char *msg)
- {
- struct msgbuf _mb;
- _mb.mtype = type;
- strcpy(_mb.mtext,msg);
- if(msgsnd(msgid, &_mb,sizeof(_mb.mtext),0)<0){
- perror("msgsnd");
- return -1;
- }
- return 0;
- }
- int recvMsg(int msgid, int type, char *out)
- {
- struct msgbuf _mb;
- if(msgrcv(msgid, &_mb, sizeof(_mb.mtext),type,IPC_NOWAIT)<0){ //0.阻塞 IPC_NOWAIT.非阻塞
- //perror("msgrcv");
- return -1;
- }
-
- strcpy(out,_mb.mtext);
- return 0;
- }
|