cmsq_sys.cpp
来自「unix/linux环境下」· C++ 代码 · 共 131 行
CPP
131 行
/********************************************************** * name: CMSQ_Sys.cpp * * Description: * SYSTEM MESSAGE QUEUE. * * Copyright to DDP 2000-2001 All rights reverved. * 2001.01.03 Created * * email: ddp@public.qz.fj.cn **********************************************************/#include "../include/CMSQ_Sys.h" CMSQ_Sys::CMSQ_Sys() { ; } CMSQ_Sys::~CMSQ_Sys() { ; } // Create a new message queue if required int CMSQ_Sys::MsqCreate(key_t key) { int retval; while( 1 ) { //if( (retval=msgget(key,PERMS|IPC_CREAT|IPC_EXCL)) < 0 ) if( (retval=msgget(key,PERMS|IPC_CREAT)) < 0 ) { if( errno==EINTR ) continue; else break; } else { break; } } return retval; } // Open a message queue int CMSQ_Sys::MsqGet(key_t key) { return( msgget(key,PERMS) ); } // Write a message to message queue // id: identify of Msq int CMSQ_Sys::MsqWrite(int id,LISTSMG *mp,int len,int flag) { int retval; while( 1 ) { if( (retval=msgsnd(id,mp,len,flag)) < 0 ) { if( errno==EINTR ) continue; else break; } else { break; } } return retval; } // recieve a message from Msq, return length of string // Before use it, you must defined mptr->type to tell // IPC which type you wanna get. // id - identify of Msq // mptr - pointer to my_buffer // flag - 0 or IPC_NOWAIT // return length of recieve string, else return -1 int CMSQ_Sys::MsqRead(int id,LISTSMG *mptr,int flag) { int retval; while( 1 ) { if( (retval=msgrcv(id,mptr,sizeof(LISTSMG),mptr->type,flag)) < 0 ) { if( errno==EINTR ) continue; else break; } else { break; } } return retval; } // Delete message queue from ipcs // id - identify of message queue int CMSQ_Sys::MsqDelete(int id) { int retval; while( 1 ) { //if( (retval=msgctl(id,IPC_RMID,(LISTSMG *)NULL)) < 0 ) if( ( retval=msgctl(id,IPC_RMID, NULL)) < 0 ) { if( errno==EINTR ) continue; else break; } else { break; } } return retval; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?