Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Linux½ø³ÌͨÐÅÖ®System VÏûÏ¢¶ÓÁÐ
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-04
  2877  次浏览      27
 

System VÏûÏ¢¶ÓÁÐÊÇOpen Group¶¨ÒåµÄXSI£¬²»ÊôÓÚPOSIX±ê×¼¡£System V IPCµÄÀúÊ·Ïà¶ÔºÜÔ磬ÔÚÉϸöÊÀ70Äê´úºóÆÚÓб´¶ûʵÑéÊҵķÖÖ§»ú¹¹¿ª·¢£¬80Äê´ú¼ÓÈëSystem VµÄϵͳÄÚºËÖУ¬ºóÀ´ÉÌÓÃUNIXϵͳ»ù±¾¶¼¼ÓÈëÁËSystem V IPCµÄ¹¦ÄÜ¡£

System VÏûÏ¢¶ÓÁÐÏà¶ÔÓÚPOSIXÏûÏ¢¶ÓÁеÄÇø±ðÖ÷ÒªÊÇ£º

POSIXÏûÏ¢¶ÓÁеĶÁ²Ù×÷×ÜÊÇ·µ»ØÏûÏ¢¶ÓÁÐÖÐÓÅÏȼ¶×î¸ßµÄ×îÔçÏûÏ¢£¬¶ø¶ÔÓÚSystem VÏûÏ¢¶ÓÁпÉÒÔ·µ»ØÈÎÒâÖ¸¶¨ÓÅÏȼ¶£¨Í¨¹ýÏûÏ¢ÀàÐÍ£©µÄÏûÏ¢¡£

µ±ÏòÒ»¸ö¿ÕÏûÏ¢¶ÓÁÐÖÐдÈëÒ»¸öÏûϢʱ£¬POSIXÏûÏ¢¶ÓÁÐÔÊÐí²úÉúÒ»¸öÐźŻòÆô¶¯Ò»¸öỊ̈߳¬System VÏûÏ¢¶ÓÁв»ÌṩÀàËÆµÄ»úÖÆ¡£

ϵͳÄں˶¼»áΪÿһ¸öSystem VÏûÏ¢¶ÓÁÐά»¤Ò»¸öÐÅÏ¢½á¹¹£¬ÔÚLinux 2.6.18Öе͍ÒåÈçÏ£º

<bits/msq.h>
struct msqid_ds
{
struct ipc_perm msg_perm; /*IPC¶ÔÏóµÄÊôÐÔÐÅÏ¢ºÍ·ÃÎÊȨÏÞ */
__time_t msg_stime; /* time of last msgsnd command */
__time_t msg_rtime; /* time of last msgrcv command */
__time_t msg_ctime; /* time of last change */
unsigned long int __msg_cbytes; /* µ±Ç°¶ÓÁÐÖÐÏûÏ¢µÄ×Ö½ÚÊý */
msgqnum_t msg_qnum; /* µ±Ç°¶ÓÁÐÖÐÏûÏ¢µÄ¸öÊý */
msglen_t msg_qbytes; /* ¶ÓÁÐÔÊÐí´æ·ÅµÄ×î´ó×Ö½ÚÊý */
__pid_t msg_lspid; /* pid of last msgsnd() */
__pid_t msg_lrpid; /* pid of last msgrcv() */
//ÏÂÃæÊDZ£Áô×Ö¶Î
#if __WORDSIZE == 32
unsigned long int __unused1;
unsigned long int __unused2;
unsigned long int __unused3;
#endif
unsigned long int __unused4;
unsigned long int __unused5;
};

ÏûÏ¢¶ÓÁеĽṹ¿ÉÄܵÄÉè¼ÆÈçÏ£º

1 System VÏûÏ¢¶ÓÁеĴ´½¨ºÍ´ò¿ª

System VÏûÏ¢¶ÓÁеĴ´½¨ºÍʹÓûáʹÓÃÏÂÃæµÄº¯Êý½Ó¿Ú£º

#include 
¡¡¡¡int msgget(key_t key, int oflg);
¡¡¡¡//³É¹¦·µ»Ø·Ç¸ºÏûÏ¢¶ÓÁÐÃèÊö·û£¬Ê§°Ü·µ»Ø-1

key£ºÏûÏ¢¶ÓÁеļü£¬ÓÃÀ´´´½¨Ò»¸öÏûÏ¢¶ÓÁС£System IPC¶¼ÓÐÒ»¸ökey£¬×÷ΪIPCµÄÍⲿ±êʶ·û£¬´´½¨³É¹¦ºó·µ»ØµÄÃèÊö·û×÷ΪIPCµÄÄÚ²¿±êʶ·ûʹÓá£keyµÄÖ÷ҪĿµÄ¾ÍÊÇʹ²»Í¬½ø³ÌÔÚͬһIPC»ãºÏ¡£key¾ßÌå˵¿ÉÒÔÓÐÈýÖÖ·½Ê½Éú³É£º

1.²»Í¬µÄ½ø³ÌÔ¼¶¨ºÃµÄÒ»¸öÖµ£»

2.ͨ¹ýÏàͬµÄ·¾¶ÃûºÍÏîÄ¿ID£¬µ÷ÓÃftok()º¯Êý£¬Éú³ÉÒ»¸ö¼ü£»

3.»¹¿ÉÒÔÉèÖÃΪIPC_PRIVATE£¬ÕâÑù¾Í»á´´½¨Ò»¸öеģ¬Î¨Ò»µÄIPC¶ÔÏó£»È»ºó½«·µ»ØµÄÃèÊö·ûͨ¹ýijÖÖ·½Ê½´«µÝ¸øÆäËû½ø³Ì£»

oflg£ºÖ¸¶¨´´½¨»ò´ò¿ªÏûÏ¢¶ÓÁеıêÖ¾ºÍ¶ÁдȨÏÞ£¨ipc_permÖеÄmode³ÉÔ±£©¡£ÎÒÃÇÖªµÀSystem V IPC¶¨ÒåÁË×Ô¼ºµÄ²Ù×÷±êÖ¾ºÍȨÏÞÉèÖñêÖ¾£¬¶øÇÒ¶¼ÊÇͨ¹ý¸Ã²ÎÊý´«µÝ£¬ÕâºÍopenº¯Êý´æÔÚ²î±ð£¬openº¯ÊýµÚÈý¸ö²ÎÊýmodeÓÃÓÚ´«µÝÎļþµÄȨÏÞ±êÖ¾¡£System V IPCµÄ²Ù×÷±êÖ¾°üº¬£ºIPC_CREAT£¬IPC_EXCL£¬È¨ÏÞÉèÖñêÖ¾ÈçÏÂͼ£º

ÏÂÃæÊÇ´´½¨ÏûÏ¢¶ÓÁеIJâÊÔ´úÂ룺

#include <iostream>
#include <cstring>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/msg.h>
using namespace std;
#define PATH_NAME "/tmp/anonymQueue"
int main(int argc, char **argv)
{
key_t key;
int fd;
if ((fd = open(PATH_NAME, O_CREAT, 0666)) < 0)
{
cout<<"open file "<<PATH_NAME<<"failed.";
cout<<strerror(errno)<<endl;
return -1;
}
close(fd);
key = ftok(PATH_NAME, 0);
int msgID;
if ((msgID = msgget(key, IPC_CREAT | 0666)) < 0)
{
cout<<"open message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
cout<<"key:0x"<<hex<<key<<endl;
cout<<"descriptor id:"<<dec<<msgID<<endl;
}

ÔÚLinux 2.6.18ÏÂÔËÐнá¹û£º

key:0x8015
¡¡¡¡descriptor id:917511

ʵÏÖSystem V IPCµÄÈκÎϵͳ¶¼ÌṩÁ½¸öÌØÊâµÄ³ÌÐòipcsºÍipcrm¡£ipcsÊä³öIPCµÄ¸÷ÖÖÐÅÏ¢£¬ipcrmÔòÓÃÓÚɾ³ý¸÷ÖÖSystem V IPC¡£ÓÉÓÚSystem V IPC²»ÊôÓÚPOSIX±ê×¼£¬ËùÒÔÕâÁ½¸öÃüÁîҲδ±»±ê×¼»¯¡£ÏÂÃæÊÇͨ¹ýipcsÃüÁîÀ´²é¿´¸Õ¸Õ´´½¨µÄÏûÏ¢¶ÓÁС£

[root@idcserver program]# ipcs -q -i 917511
¡¡¡¡Message Queue msqid=917511
¡¡¡¡uid=0 gid=0 cuid=0 cgid=0 mode=0666
¡¡¡¡cbytes=0 qbytes=65536 qnum=0 lspid=0 lrpid=0
¡¡¡¡send_time=Not set
¡¡¡¡rcv_time=Not set
¡¡¡¡change_time=Wed Aug 7 16:39:46 2013

2 System VÏûÏ¢¶ÓÁеÄʹÓÃ

System VÏûÏ¢¶ÓÁеÄдÈëÏûϢʹÓÃÏÂÃæµÄº¯Êý½Ó¿Ú£º

#include <sys/msg.h>
¡¡¡¡int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
¡¡¡¡//³É¹¦·µ»Ø0£¬Ê§°Ü·µ»Ø-1

msqid£ºÏûÏ¢¶ÓÁеÄÃèÊö·û£»

msgp£ºÖ¸Ïò´æ·ÅÏûÏ¢µÄ»º³åÇø£¬¸Ã»º³åÇøÖаüº¬ÏûÏ¢ÀàÐͺÍÏûÏ¢ÌåÁ½²¿·ÖÄÚÈÝ¡£¸Ã»º³åÇøµÄ½á¹¹ÊÇÓÉÓû§¶¨ÒåµÄ£¬ÔÚ<sys/msg.h>ÖÐÓйØÓڸûº³åÇø½á¹¹¶¨ÒåµÄ²Î°æ¿¼Ä££º

struct msgbuf
¡¡¡¡{
¡¡¡¡long int mtype; /* type of received/sent message */
¡¡¡¡char mtext[1]; /* text of the message */
¡¡¡¡};

»º³åÇøµÄ¿ªÍ·ÊÇÒ»¸ölongÐ͵ÄÏûÏ¢ÀàÐÍ£¬¸ÃÏûÏ¢ÀàÐͱØÐëÊÇÒ»¸ö·Ç¸ºÊý¡£½ô¸úÔÚÏûÏ¢ÀàÐͺóÃæµÄÊÇÏûÏ¢Ì岿·Ö£¨Èç¹ûÏûÏ¢³¤¶È´óÓÚ0£©£¬²Î¿¼Ä£°æÖж¨ÒåµÄmtextÖ»ÊÇ˵Ã÷ÏûÏ¢Ì壬¸Ã²¿·Ö¿ÉÒÔ×Ô¶¨Ò峤¶È¡£ÎÒÃÇ×Ô¼ºµÄÓ¦Óö¼»á¶¨ÒåÌØ¶¨µÄÏûÏ¢½á¹¹¡£

msgsz£º»º³åÇøÖÐÏûÏ¢Ì岿·ÖµÄ³¤¶È£»

msgflg£ºÉèÖòÙ×÷±êÖ¾¡£¿ÉÒÔΪ0£¬IPC_NOWAIT£»ÓÃÓÚÔÚÏûÏ¢¶ÓÁÐÖÐûÓпÉÓõĿռäʱ£¬µ÷ÓÃÏ̲߳ÉÓúÎÖÖ²Ù×÷·½Ê½¡£

±ê־ΪIPC_NOWAIT£¬±íʾmsgsnd²Ù×÷ÒÔ·Ç×èÈûµÄ·½Ê½½øÐУ¬ÔÚÏûÏ¢¶ÓÁÐÖÐûÓпÉÓõĿռäʱ£¬msgsnd²Ù×÷»áÁ¢¿Ì·µ»Ø¡£²¢Ö¸¶¨EAGAIN´íÎó£»

±ê־Ϊ0£¬±íʾmsgsnd²Ù×÷ÒÔ×èÈûµÄ·½Ê½½øÐУ¬ÕâÖÖÇé¿öÏÂÔÚÏûÏ¢¶ÓÁÐÖÐûÓпÉÓõĿռäʱµ÷ÓÃÏ̻߳ᱻ×èÈû£¬Ö±µ½ÏÂÃæµÄÇé¿ö·¢Éú£º

µÈµ½Óдæ·ÅÏûÏ¢µÄ¿Õ¼ä£»

ÏûÏ¢¶ÓÁдÓϵͳÖÐɾ³ý£¬ÕâÖÖÇé¿öÏ»طµ»ØÒ»¸öEIDRM´íÎó£»

µ÷ÓÃÏ̱߳»Ä³¸ö²¶×½µ½µÄÐźÅÖжϣ¬ÕâÖÖÇé¿öÏ·µ»ØÒ»¸öEINTR´íÎó£»

System VÏûÏ¢¶ÓÁеĶÁÈ¡ÏûϢʹÓÃÏÂÃæµÄº¯Êý½Ó¿Ú£º

#include <sys/msg.h>
¡¡¡¡ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
¡¡¡¡//³É¹¦·µ»Ø½ÓÊÕµ½µÄÏûÏ¢µÄÏûÏ¢ÌåµÄ×Ö½ÚÊý£¬Ê§°Ü·µ»Ø-1

msqid£ºÏûÏ¢¶ÓÁеÄÃèÊö·û£»

msgp£ºÖ¸Ïò´ý´æ·ÅÏûÏ¢µÄ»º³åÇø£¬¸Ã»º³åÇøÖн«»á´æ·Å½ÓÊÕµ½µÄÏûÏ¢µÄÏûÏ¢ÀàÐͺÍÏûÏ¢ÌåÁ½²¿·ÖÄÚÈÝ¡£¸Ã»º³åÇøµÄ½á¹¹ÊÇÓÉÓû§¶¨ÒåµÄ£¬ºÍmsgsndÏà¶ÔÓ¦¡£

msgsz£º»º³åÇøÖÐÄÜ´æ·ÅÏûÏ¢Ì岿·ÖµÄ×î´ó³¤¶È£¬ÕâÒ²ÊǸú¯ÊýÄÜ·µ»ØµÄ×î´óÊý¾ÝÁ¿£»¸Ã×ֶεĴóСӦ¸ÃÊÇsizeof(msg buffer) - sizeof(long)£»

msgtyp£ºÏ£Íû´ÓÏûÏ¢¶ÓÁÐÖлñÈ¡µÄÏûÏ¢ÀàÐÍ¡£

msgtypΪ0£¬·µ»ØÏûÏ¢¶ÓÁÐÖеĵÚÒ»¸öÏûÏ¢£»

msgtyp > 0£¬·µ»Ø¸ÃÏûÏ¢ÀàÐ͵ĵÚÒ»¸öÏûÏ¢£»

msgtyp < 0£¬·µ»ØÐ¡ÓÚ»òµÈÓÚmsgtyp¾ø¶ÔÖµµÄÏûÏ¢ÖÐÀàÐÍ×îСµÄµÚÒ»¸öÏûÏ¢£»

msgflg£ºÉèÖòÙ×÷±êÖ¾¡£¿ÉÒÔΪ0£¬IPC_NOWAIT£¬MSG_NOERROR£»ÓÃÓÚÔÚÏûÏ¢¶ÓÁÐÖÐûÓпÉÓõÄÖ¸¶¨ÏûϢʱ£¬µ÷ÓÃÏ̲߳ÉÓúÎÖÖ²Ù×÷·½Ê½¡£

±ê־ΪIPC_NOWAIT£¬±íʾmsgrcv²Ù×÷ÒÔ·Ç×èÈûµÄ·½Ê½½øÐУ¬ÔÚÏûÏ¢¶ÓÁÐÖÐûÓпÉÓõÄÖ¸¶¨ÏûϢʱ£¬msgrcv²Ù×÷»áÁ¢¿Ì·µ»Ø£¬²¢É趨errnoΪENOMSG¡£

±ê־Ϊ0£¬±íʾmsgrcv²Ù×÷ÊÇ×èÈû²Ù×÷£¬Ö±µ½ÏÂÃæµÄÇé¿ö·¢Éú£º

ÏûÏ¢¶ÓÁÐÖÐÓÐÒ»¸öËùÇëÇóµÄÏûÏ¢ÀàÐÍ¿ÉÒÔ»ñÈ¡£»

ÏûÏ¢¶ÓÁдÓϵͳÖÐɾ³ý£¬ÕâÖÖÇé¿öÏ»طµ»ØÒ»¸öEIDRM´íÎó£»

µ÷ÓÃÏ̱߳»Ä³¸ö²¶×½µ½µÄÐźÅÖжϣ¬ÕâÖÖÇé¿öÏ·µ»ØÒ»¸öEINTR´íÎó£»

±ê־ΪMSG_NOERROR£¬±íʾ½ÓÊÕµ½µÄÏûÏ¢µÄÏûÏ¢ÌåµÄ³¤¶È´óÓÚmsgsz³¤¶Èʱ£¬msgrcv²ÉÈ¡µÄ²Ù×÷¡£Èç¹ûÉèÖÃÁ˸ñêÖ¾msgrcvÔÚÕâÖÖÇé¿öÏ»ؽضÏÊý¾Ý²¿·Ö£¬¶ø²»·µ»Ø´íÎ󣬷ñÔò·µ»ØÒ»¸öE2BIG´íÎó¡£

ÏÂÃæÊǹØÓÚÏûÏ¢¶ÓÁжÁдµÄ²âÊÔ´úÂ룺

#include <iostream>
#include <cstring>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/msg.h>
using namespace std;
#define PATH_NAME "/tmp/anonymQueue"
key_t CreateKey(const char *pathName)
{
int fd;
if ((fd = open(PATH_NAME, O_CREAT, 0666)) < 0)
{
cout<<"open file "<<PATH_NAME<<"failed.";
cout<<strerror(errno)<<endl;
return -1;
}
close(fd);
return ftok(PATH_NAME, 0);
}
int main(int argc, char **argv)
{
key_t key;
key = CreateKey(PATH_NAME);
int msgID;
if ((msgID = msgget(key, IPC_CREAT | 0666)) < 0)
{
cout<<"open message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
if (fork() == 0)
{
char msg[] = "cute yuki...";
char *msgBuf = new char[sizeof(long) + sizeof(msg)];
long mtype = 1;
memmove(msgBuf, &mtype, sizeof(mtype));
memmove(msgBuf + sizeof(mtype), msg, sizeof(msg));
for (int i = 1; i <= 5; ++i)
{
if (msgsnd(msgID, msgBuf, sizeof(msg), 0) < 0)
{
cout<<"send message "<<i<<"failed...";
cout<<strerror(errno)<<endl;
continue;
}
cout<<"child: send message "<<i<<" success..."<<endl;
sleep(1);
}
exit(0);
}
char msgBuf[256];
long mtype;
int recvLen;
for (int i = 1; i <= 5; ++i)
{
recvLen = msgrcv(msgID, msgBuf, 256 - sizeof(long), 0, 0);
if (recvLen < 0)
{
cout<<"receive message failed...";
cout<<strerror(errno)<<endl;
continue;
}
memmove(&mtype, msgBuf, sizeof(long));
cout<<"parent receive a message:"<<endl;
cout<<"message type:"<<mtype<<endl;
cout<<"message body:"<<msgBuf + sizeof(long)<<endl;
}
return 0;
}

ÔÚLinux 2.6.18ϵÄÖ´Ðнá¹ûΪ£º

child: send message 1 success...
parent receive a message:
message type:1
message body:cute yuki...
child: send message 2 success...
parent receive a message:
message type:1
message body:cute yuki...
child: send message 3 success...
parent receive a message:
message type:1
message body:cute yuki...
child: send message 4 success...
parent receive a message:
message type:1
message body:cute yuki...
child: send message 5 success...
parent receive a message:
message type:1
message body:cute yuki...

3 System VÏûÏ¢¶ÓÁеĿØÖƲÙ×÷

¶ÔSystem VÏûÏ¢¶ÓÁеÄɾ³ý£¬ÊôÐÔµÄÉèÖúͻñÈ¡µÈ¿ØÖƲÙ×÷ҪʹÓÃÏÂÃæµÄº¯Êý½Ó¿Ú£º

#include <sys/msg.h>
¡¡¡¡int msgctl(int msqid, int cmd, struct msqid_ds *buf);
¡¡¡¡//³É¹¦·µ»Ø0£¬Ê§°Ü·µ»Ø-1

msqid£ºÏûÏ¢¶ÓÁеÄÃèÊö·û£»

cmd£º¿ØÖƲÙ×÷µÄÃüÁSUS±ê×¼ÌṩÒÔÏÂÈý¸öÃüÁ

IPC_RMID£¬É¾³ýÒ»¸öÏûÏ¢¶ÓÁС£Ö´ÐиÃÃüÁîϵͳ»áÁ¢¿Ì°Ñ¸ÃÏûÏ¢¶ÓÁдÓÄÚºËÖÐɾ³ý£¬¸ÃÏûÏ¢¶ÓÁÐÖеÄËùÓÐÏûÏ¢½«»á±»¶ªÆú¡£ÕâºÍÒѾ­ÌÖÂÛ¹ýµÄPOSIXÏûÏ¢¶ÓÁÐÓкܴó²î±ð£¬POSIXÏûÏ¢¶ÓÁÐͨ¹ýµ÷ÓÃmq_unlinkÀ´´ÓÄÚºËÖÐɾ³ýÒ»¸öÏûÏ¢¶ÓÁУ¬µ«ÏûÏ¢¶ÓÁеÄÕæÕýÎö¹¹»áÔÚ×îºóÒ»¸ömq_close½áÊøºó·¢Éú¡£

IPC_SET£¬¸ù¾ÝbufµÄËùÖ¸µÄÖµÀ´ÉèÖÃÏûÏ¢¶ÓÁÐmsqid_ds½á¹¹ÖеÄmsg_perm.uid£¬msg_perm.gid£¬msg_perm.mode£¬msg_qbytesËĸö³ÉÔ±¡£

IPC_STAT£¬Í¨¹ýbuf·µ»Øµ±Ç°ÏûÏ¢¶ÓÁеÄmsqid_ds½á¹¹¡£

ÔÚLinuxÏ»¹ÓÐÀýÈçIPC_INFO£¬MSG_INFOµÈÃüÁ¾ßÌå¿ÉÒԲο¼LinuxÊֲ᣻

buf£ºÖ¸Ïòmsqid_ds½á¹¹µÄÖ¸Õ룻

ÏÂÃæÊDzâÊÔ´úÂ룺

#include <iostream>
#include <cstring>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/msg.h>
using namespace std;
#define PATH_NAME "/tmp/anonymQueue"
key_t CreateKey(const char *pathName)
{
int fd;
if ((fd = open(PATH_NAME, O_CREAT, 0666)) < 0)
{
cout<<"open file "<<PATH_NAME<<"failed.";
cout<<strerror(errno)<<endl;
return -1;
}
close(fd);
return ftok(PATH_NAME, 0);
}
int main(int argc, char **argv)
{
key_t key;
key = CreateKey(PATH_NAME);
int msgID;
if ((msgID = msgget(key, IPC_CREAT | 0666)) < 0)
{
cout<<"open message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
msqid_ds msgInfo;
msgctl(msgID, IPC_STAT, &msgInfo);
cout<<"msg_qbytes:"<<msgInfo.msg_qbytes<<endl;
cout<<"msg_qnum:"<<msgInfo.msg_qnum<<endl;
cout<<"msg_cbytes:"<<msgInfo.msg_cbytes<<endl;
return 0;
}

ÔÚLinux 2.6.18ϵÄÖ´Ðнá¹ûΪ£º

msg_qbytes:65536
msg_qnum:2
msg_cbytes:26

¹ØÓÚÏûÏ¢¶ÓÁÐÖÐÔÊÐí´æ·Å×î´óµÄ×Ö½ÚÊý¿ÉÒÔͨ¹ýIPC_SETÃüÁî½øÐÐÐ޸쬏ÃÐÞ¸ÄÖ»ÄÜÕë¶Ô±¾ÏûÏ¢¶ÓÁÐÉúЧ¡£ÈçϲâÊÔ´úÂ룺

int main(int argc, char **argv)
{
key_t key;
key = CreateKey(PATH_NAME);
int msgID;
if ((msgID = msgget(key, IPC_CREAT | 0666)) < 0)
{
cout<<"open message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
msqid_ds msgInfo;
msgctl(msgID, IPC_STAT, &msgInfo);
cout<<"msg_qbytes:"<<msgInfo.msg_qbytes<<endl;
cout<<"msg_qnum:"<<msgInfo.msg_qnum<<endl;
cout<<"msg_cbytes:"<<msgInfo.msg_cbytes<<endl;
msgInfo.msg_qbytes = 6553600;
if (msgctl(msgID, IPC_SET, &msgInfo) < 0)
{
cout<<"set message queue failed...";
cout<<strerror(errno)<<endl;
return -1;
}
msgctl(msgID, IPC_STAT, &msgInfo);
cout<<"msg_qbytes:"<<msgInfo.msg_qbytes<<endl;
cout<<"msg_qnum:"<<msgInfo.msg_qnum<<endl;
cout<<"msg_cbytes:"<<msgInfo.msg_cbytes<<endl;
return 0;
}

ÔÚLinux 2.6.18ϵÄÖ´Ðнá¹ûΪ£º

msg_qbytes:65536
¡¡¡¡msg_qnum:0
¡¡¡¡msg_cbytes:0
¡¡¡¡msg_qbytes:6553600
¡¡¡¡msg_qnum:0
¡¡¡¡msg_cbytes:0

4 System VÏûÏ¢¶ÓÁеÄÄÚºËÏÞÖÆ

¶ÔSystem V IPC£¬ÏµÍ³ÍùÍù»á´æÔÚһЩÏÞÖÆ£¬¶ÔÓÚÏûÏ¢¶ÓÁУ¬ÔÚLinux2.6.18ÖУ¬ÏµÍ³Äں˴æÔÚÒÔÏÂÏÞÖÆ£º

[root@idcserver program]# sysctl -a |grep msg
¡¡¡¡kernel.msgmnb = 65536 //Ò»¸öÏûÏ¢¶ÓÁÐÉÏÔÊÐíµÄ×î´ó×Ö½ÚÊý
¡¡¡¡kernel.msgmni = 16 //ϵͳ·¶Î§ÄÚÔÊÐí´æÔÚµÄ×î´óÏûÏ¢¶ÓÁÐÊý
¡¡¡¡kernel.msgmax = 65536 //ÿ¸öÏûÏ¢µÄ×î´ó×Ö½ÚÊý

¶ÔÓÚSystem VÏûÏ¢¶ÓÁÐÒ»°ãÄں˻¹ÓÐÒ»¸öÏÞÖÆ£ºÏµÍ³·¶Î§ÄÚµÄ×î´óÏûÏ¢Êý£¬ÔÚLinuxÏÂÕâ¸öÏÞÖÆÓÉmsgmnb*msgmni¾ö¶¨¡£

ÉÏÃæÒѾ­Ëµ¹ý¿ÉÒÔͨ¹ýIPC_SETÀ´ÉèÖÃʹÓÃÖеÄÏûÏ¢¶ÓÁеÄ×î´ó×Ö½ÚÊý¡£µ«ÊÇÒªÔÚϵͳ·¶Î§ÄÚ¶ÔÄÚºËÏÞÖÆ½øÐÐÐ޸ģ¬ÔÚLinuxÏÂÃæ¿ÉÒÔͨ¹ýÐÞ¸Ä/etc/sysctl.confÄں˲ÎÊýÅäÖÃÎļþ£¬È»ºóÅäºÏsysctlÃüÁîÀ´¶ÔÄں˲ÎÊý½øÐÐÉèÖá£ÀýÈçÏÂÃæÊ¾Àý£º

[root@idcserver program]#echo "kernel.msgmnb = 6553600" >>/etc/sysctl.conf
¡¡¡¡[root@idcserver program]#echo "kernel.msgmni = 100" >>/etc/sysctl.conf
¡¡¡¡[root@idcserver program]#echo "kernel.msgmax = 6553600" >>/etc/sysctl.conf
¡¡¡¡[root@idcserver program]#sysctl -p
¡¡¡¡[root@idcserver program]# sysctl -a |grep msg
¡¡¡¡kernel.msgmnb = 6553600
¡¡¡¡kernel.msgmni = 100
¡¡¡¡kernel.msgmax = 6553600
   
2877 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

»ùÓÚÄ£Ð͵ÄÕû³µµç×ÓµçÆø¼Ü¹¹Éè¼Æ
ǶÈëʽÉ豸É쵀 Linux ϵͳ¿ª·¢
Linux µÄ²¢·¢¿É¹ÜÀí¹¤×÷¶ÓÁÐ
ARMǶÈëʽϵͳµÄÎÊÌâ×ܽá·ÖÎö
ǶÈëʽϵͳÉè¼ÆÓëʵÀý¿ª·¢
WinCE6.0µÄEBOOT¸ÅÒª


UML +RoseRealtime+ǶÈëʽ
C++ǶÈëʽϵͳ¿ª·¢
ǶÈëʽ°×ºÐ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
ǶÈëʽ²Ù×÷ϵͳVxWorks


Öйúº½¿Õ ǶÈëʽC¸ßÖÊÁ¿±à³Ì
ʹÓÃEAºÍUML½øÐÐǶÈëʽϵͳ·ÖÎöÉè¼Æ
»ùÓÚSysMLºÍEAµÄǶÈëʽϵͳ½¨Ä£
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© ǶÈëʽC¸ßÖÊÁ¿±à³Ì
±±¾© ¸ßÖʸßЧǶÈëʽ¿ª·¢
Nagra linuxÄÚºËÓëÉ豸Çý¶¯Ô­Àí