无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁 > 幫助中心>文章內容

    Linux多線程同步之消息隊列

    發(fā)布時間:  2012/8/10 10:26:20
     消息隊列是消息的鏈表,存放在內核中并有消息隊列標示符標示。

      msgget用于創(chuàng)建一個新隊列或打開一個現(xiàn)存的隊列。msgsnd將新消息加入到消息隊列中;每個消息包括一個long型的type;和消息緩存;msgrcv用于從隊列中取出消息;取消息很智能,不一定先進先出

     、賛sgget,創(chuàng)建一個新隊列或打開一個現(xiàn)有隊列

      #include

      int msgget ( key_t key, int flag );

      //成功返回消息隊列ID;錯誤返回-1

      ②msgsnd: 發(fā)送消息

      #include

      int msgsnd( int msgid, const void* ptr, size_t nbytes, int flag )

      //成功返回0,錯誤返回-1

      a: flag可以指定為IPC_NOWAIT; 若消息隊列已滿,則msgsnd立即出錯返回EABAIN;

      若沒指定IPC_NOWAIT; msgsnd會阻塞,直到消息隊列有空間為止

     、踡sgrcv: 讀取消息:

      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| 的數(shù)據(jù);若這種消息有若干個,則取類型值最小的消息

      消息隊列創(chuàng)建步驟:

      #define MSG_FILE "."

      struct msgtype {

      long mtype;

      char buffer[BUFFER+1];

      };

      if((key=ftok(MSG_FILE,'a'))==-1)

      {

      fprintf(stderr,"Creat Key Error:%sn", strerror(errno));

      exit(1);

      }

      if((msgid=msgget(key, IPC_CREAT | 0666/*PERM*/))==-1)

      {

      fprintf(stderr,"Creat Message Error:%sn", strerror(errno));

      exit(1);

      }

      msg.mtype = 1;

      strncpy(msg.buffer, argv[1], BUFFER);

      msgsnd(msgid, &msg, sizeof(struct msgtype), 0);

      msgrcv(msgid, &msg, sizeof(struct msgtype), 1, 0);

      示例代碼:

      #include

      #include

      #include

      #include

      #include

      #include

      #include

      #include

      #include

      #define MSG_FILE "."

      #define BUFFER 255

      #define PERM S_IRUSR|S_IWUSR

      #define IPCKEY 0x111

      struct msgtype {

      long mtype;

      char buffer[BUFFER+1];

      };

      void* thr_test( void* arg ){

      struct msgtype msg;

      int msgid;

      msgid = *((int*)arg);

      printf("msqid = %d IPC_NOWAIT = %dn", msgid, IPC_NOWAIT);

      time_t tt = time(0)+8;

      //while( time(0) <= tt )

      //{

      msgrcv(msgid, &msg, sizeof(struct msgtype), 1, 0);

      fprintf(stderr,"Server Receive:%sn", msg.buffer);

      msg.mtype = 2;

      msgsnd(msgid, &msg, sizeof(struct msgtype), 0);

      //}

      pthread_exit( (void*)2 );

      }

      int main(int argc, char **argv)

      {

      struct msgtype msg;

      key_t key;

      int msgid;

      pthread_t tid;

      if(argc != 2)

      {

      fprintf(stderr,"Usage:%s stringn", argv[0]);

      exit(1);

      }

      /*

      char path[256];

      sprintf( path, "%s/", (char*)getenv("HOME") );

      printf( "path is %sn", path );

      msgid=ftok( path, IPCKEY );

      */

      if((key=ftok(MSG_FILE,'a'))==-1)

      {

      fprintf(stderr,"Creat Key Error:%sn", strerror(errno));

      exit(1);

      }

      if((msgid=msgget(key, IPC_CREAT | 0666/*PERM*/))==-1)

      {

      fprintf(stderr,"Creat Message Error:%sn", strerror(errno));

      exit(1);

      }

      pthread_create( &tid, NULL, thr_test, &msgid );

      fprintf(stderr,"msid is :%dn", msgid);

      msg.mtype = 1;

      strncpy(msg.buffer, argv[1], BUFFER);

      msgsnd(msgid, &msg, sizeof(struct msgtype), 0);

      exit(0);

      }


    本文出自:億恩科技【mszdt.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線