爱问知识人 爱问教育 医院库

Linux多线程同步之消息队列有何特点?

首页

Linux多线程同步之消息队列有何特点?

Linux多线程同步之消息队列有何特点?

提交回答

全部答案

    2017-07-27 22:04:09
  •   消息队列是消息的链表,存放在内核中并有消息队列标示符标示。
    msgget用于创建一个新队列或打开一个现存的队列。msgsnd将新消息加入到消息队列中;每个消息包括一个long型的type;和消息缓存;msgrcv用于从队列中取出消息;取消息很智能,不一定先进先出
    ①msgget,创建一个新队列或打开一个现有队列
    #include
    int msgget ( key_t key, int flag );
    //成功返回消息队列ID;错误返回-1
    ②msgsnd: 发送消息
    #include
    int msgsnd( int msgid, const void* ptr, size_t nbytes, int flag )
    //成功返回0,错误返回-1
    a:
    flag可以指定为IPC_NOWAIT;
    若消息队列已满,则msgsnd立即出错返回EABAIN;
    若没指定IPC_NOWAIT; msgsnd会阻塞,直到消息队列有空间为止
    ③msgrcv: 读取消息:
    ssize_t msgrcv( int msgid, void* ptr, size_t nbytes, long type, int flag );
    a。
       type == 0; 返回消息队列中第一个消息,先进先出 b。 type > 0 返回消息队列中类型为tpye的第一个消息 c。 type < 0 返回消息队列中类型 <= |type| 的数据;若这种消息有若干个,则取类型值最小的消息 消息队列创建步骤: #define MSG_FILE "。
      " struct msgtype { long mtype; char buffer[BUFFER+1]; }; if((key=ftok(MSG_FILE,'a'))==-1) { fprintf(stderr,"Creat Key Error:%s\n", strerror(errno)); exit (1); } if((msgid=msgget(key, IPC_CREAT | 0666/*PERM*/))==-1) { fprintf(stderr,"Creat Message Error:%s\n", strerror(errno)); exit (1); }。
      

    爱***

    2017-07-27 22:04:09

类似问题

换一换
  • 系统软件 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):