Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335849
  • 博文数量: 47
  • 博客积分: 834
  • 博客等级: 军士长
  • 技术积分: 695
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-07 09:38
文章分类
文章存档

2018年(1)

2015年(1)

2014年(2)

2013年(2)

2012年(23)

2011年(18)

分类: LINUX

2012-04-28 18:13:09

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

  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

  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. }
阅读(2419) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

十七岁的回忆2012-05-06 10:54:59

例子很好,博主总结的值得收藏~~

☆彼岸★花开2012-05-06 10:45:10

不错啊,很多都常用,多谢分享了