Linux下消息队列的简单函数介绍

2603阅读 2评论2012-04-28 乐百事2
分类:LINUX

ftok()函数

#include

#include

函数原型: key_t  ftok( const  char * pathname , int   proj_id  );

参数:

返回值: 成功时候返回key_t 类型的key值,失败返回-1

 

msgget函数

#include

#include

#include

函数原型: int    msgget ( key_t  key , int  msgflg );

函数描述:建立消息队列

参数:

msgflg表示权限以及消息队列的一些特性,有以下取值:IPC_PRIVATE   IPC_CREAT  IPC_EXCL  0666 等等

返回值:

成功时返回队列ID,失败返回-1,错误原因存于error中

 

 

 

msgsnd函数:将消息送入消息队列

#include

#include

#include

函数原型:int  msgsnd ( int msgid ,  struct msgbuf*msgp , int msgsz, int msgflg );

参数说明:

smgbuf结构体定义如下:

struct smgbuf

{

                     long   mtype;

                    char   mtext [x] ;  //长度由msgsz决定

}

 

msgflg 可设置为 IPC_NOWAIT 。如果消息队列已满或其他情况无法送入消息,则立即返回 EAGIN

 

msgrcv函数:从消息队列中读取消息

#include

#include

#include

函数定义:int  msgrcv( int  msgid , struct   msgbuf*  msgp ,  int msgsz ,  long msgtyp, int msgflg);

参数:

msgbuf:结构体,定义如下:

struct msgbuf

{

                      long  mtype ;  //信息种类

                       char   mtest[x];//信息内容   ,长度由msgsz指定

}

 

msgtyp:  信息类型。 取值如下:

 msgtyp = 0 ,不分类型,直接返回消息队列中的第一项

 msgtyp > 0 ,返回第一项 msgtyp与 msgbuf结构体中的mtype相同的信息

msgtyp <0 , 返回第一项 mtype小于等于msgtyp绝对值的信息

 

msgflg:取值如下:

IPC_NOWAIT ,不阻塞

IPC_NOERROR ,若信息长度超过参数msgsz,则截断信息而不报错。

 

 

返回值:成功时返回所获取信息的长度,失败返回-1,错误信息存于error

 

 

例:

msgA.c

[cpp] view plaincopy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6.   
  7. int main()  
  8. {  
  9.     //生成key  
  10.     key_t key = ftok(".",1000);  
  11.     //创建消息队列  
  12.     int msgid = msgget(key,IPC_CREAT|IPC_EXCL|0600);  
  13.     if(msgid<0)perror("error"),exit(-1);  
  14.     //发送消息  
  15.     char *msg = "Hello world!";  
  16.     if(msgsnd(msgid,msg,strlen(msg),0)<0)perror("error");  
  17.     //删除消息队列  
  18. }  


 

msgB.c

[cpp] view plaincopy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6.   
  7. int main()  
  8. {  
  9.     key_t key = ftok(".",1000);  
  10.     int msgid = msgget(key,0);  
  11.     if(msgid<0)perror("error"),exit(-1);  
  12.     char msg[100]={};  
  13.     if(msgrcv(msgid,msg,sizeof(msg),0,0)<0)perror("error");  
  14.     printf("msg:%s\n",msg);  
  15. }
上一篇:linux下c程序调用reboot函数实现直接重启
下一篇:Linux下写自己应用程序的log文件

文章评论