<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一江春水向東流

    做一個有思想的人,期待與每一位熱愛思考的人交流,您的關(guān)注是對我最大的支持。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      44 隨筆 :: 139 文章 :: 81 評論 :: 0 Trackbacks

    共享內(nèi)存原型
    shmid_ds結(jié)構(gòu)
    struct shmid_ds{
    ??? struct ipc_perm??? shm_perm;
    ??? size_t?????????????????? shm_segsz;
    ??? pid_t??????????????????? shm_lpid;
    ??? pid_t????????????????????shm_cpid;
    ??? shmatt_t???????????????shm_nattch;
    ??? time_t???????????????????shm_atime;
    ??? time_t?????????????????? shm_dtime;
    ????time_t?????????????????? shm_ctime;
    ??? .
    };

    #include <sys/shm.h>
    int shmget (key_t? key, size_t size, int flag);
    ???? 成功返回共享存儲ID,錯誤返回-1
    int shmctl (int shmid, int cmd, struct shmid_ds,*buf);
    ???? cmd有 IPC_STAT, IPC_SET, IPC_RMID, SHM_LOCK, SHM_UNLOCK

    連接到地址空間
    void *shmat (int shmid ,const void *addr, int flag);

    對共享內(nèi)存操作結(jié)束時,脫離該段
    int shmdt (void *addr);

    要運行程序,需要在當(dāng)前目錄下建立一個share文件,share是一個空文件,沒有任何意義,只是函數(shù)ftok需要一個文件名作參數(shù),ftok另一個參數(shù)可以為任何數(shù)字。

    程序運行后,分為父子進(jìn)程,子進(jìn)程申請共享內(nèi)存,然后等待父進(jìn)程繼續(xù)執(zhí)行,父進(jìn)程首先等待子進(jìn)程申請到共享內(nèi)存標(biāo)識,然后輸出共享內(nèi)存中的內(nèi)容,為了演示共享內(nèi)存可以隨時更新,程序中在子進(jìn)程里產(chǎn)生隨機數(shù)寫入共享內(nèi)存供父進(jìn)程讀取。
    代碼如下:

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<string.h>

    #include<time.h>
    #include<signal.h>
    #include<sys/ipc.h>
    #include<sys/shm.h>
    #include<sys/types.h>

    int shmID;
    char * buf;
    ?
    void finalize(int signo)
    {
    ?shmctl(shmID,IPC_RMID,NULL);
    ?
    ?exit(0);
    }

    int main()
    {
    ?int i = 1;??
    ?key_t shmKey;
    ?
    ?signal(SIGINT,finalize);
    ?signal(SIGTERM,finalize);
    ?
    ?if(fork() == 0)?//子進(jìn)程
    ?{??
    ??shmKey = ftok("share",16);??//可以使用任何大于0的數(shù)字,如果名字和數(shù)相同,則產(chǎn)生的key相同。
    ??if(shmKey == -1)
    ??{
    ???printf("創(chuàng)建key出錯\n");
    ???exit(-1);
    ??}
    ??
    ??shmID = shmget(shmKey,20,IPC_CREAT | IPC_EXCL | 0666);
    ??if(shmID == -1)
    ??{
    ???printf("創(chuàng)建共享標(biāo)識出錯\n");
    ???exit(-1);
    ??}
    ??
    ??sleep(2);?//等待父進(jìn)程執(zhí)行,好顯示第一行為空。
    ??while(1)
    ??{
    ???buf = (char *)shmat(shmID,NULL,0);
    ???srandom(time(NULL));
    ???sprintf(buf,"%d",random());?
    ???shmdt(buf);??
    ??}
    ?}
    ?else??//父進(jìn)程
    ?{
    ??sleep(1);?//讓子進(jìn)程先執(zhí)行,以建立內(nèi)存映射。
    ??
    ??shmKey = ftok("share",16);??//可以使用任何大于0的數(shù)字,如果名字和數(shù)相同,則產(chǎn)生的key相同。
    ??if(shmKey == -1)
    ??{
    ???printf("創(chuàng)建key出錯\n");
    ???exit(-1);
    ??}
    ??
    ??shmID = shmget(shmKey,20,0);?//0表示如果shmKey映射的不存在則報錯。
    ??if(shmID == -1)
    ??{
    ???printf("引用共享標(biāo)識出錯\n");
    ???exit(-1);
    ??}
    ??
    ??while(1)
    ??{?
    ???buf = (char *)shmat(shmID,NULL,0);
    ???printf("%d. 現(xiàn)在共享內(nèi)存中的內(nèi)容為:%s\n",i++,buf);
    ???shmdt(buf);
    ???sleep(1);
    ??}
    ?}?

    ?return 0;
    }


    ?

    posted on 2008-04-04 23:55 allic 閱讀(1516) 評論(0)  編輯  收藏 所屬分類: linux/UNIX 應(yīng)用開發(fā)
    主站蜘蛛池模板: 亚洲精品无码人妻无码| 亚洲国产精品VA在线看黑人| 亚洲一区动漫卡通在线播放| 男人进去女人爽免费视频国产 | 亚洲啪啪综合AV一区| 黄页网站在线观看免费| 免费大片在线观看网站| 羞羞视频免费观看| 亚洲精品无码av天堂| 精品久久久久久无码免费| 亚洲啪啪AV无码片| 亚欧日韩毛片在线看免费网站| 亚洲第一区香蕉_国产a| 麻豆高清免费国产一区| 亚洲国产亚洲片在线观看播放| 免费看美女裸露无档网站| 亚洲无码一区二区三区| 亚洲国产人成中文幕一级二级| 国产精品小视频免费无限app| 色噜噜AV亚洲色一区二区| 在线免费视频你懂的| 久久久久久久综合日本亚洲| 一级毛片aaaaaa免费看| 亚洲va精品中文字幕| 日韩在线免费电影| jizz免费在线观看| 激情内射亚洲一区二区三区| 久久99九九国产免费看小说| 亚洲码欧美码一区二区三区| 免费a级毛片视频| 最近中文字幕大全免费版在线 | 一区二区三区四区免费视频 | 精品久久久久久国产免费了 | 亚洲色成人四虎在线观看| 免费国产一级特黄久久| 中国一级毛片免费看视频| 亚洲欧洲尹人香蕉综合| 又粗又硬又黄又爽的免费视频| 国产亚洲精品免费视频播放| 久久久亚洲欧洲日产国码是AV| 成人免费毛片观看|