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

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

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

    一江春水向東流

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

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

    IPC之共享存儲區
    用共享存儲區進行進程間通信主要有以下步驟組成
    1. Create shared memory?
    int shmget(key_t key, int size, int shmflg);?
    if ((shm_id = shmget (mykey, sizeof (struct sharedbuf), 0600 | IFLAGS)) < 0)
    ??? perror ("shmget");

    2. Attach shared memory?
    char *buf = shmat (shm_id, 0, 0);
    ?
    3. Read / Write shared memory?
    sharedbuf->size = size_;?
    memcpy(sharedbuf->buf, mybuf, size_);?
    memcpy(mybuf, sharedbuf->buf, sharedbuf->size);?
    ?
    3. Detach shared memory (optional)?
    shmdt (buf);
    ?
    4. Remove shared memory?
    if (shmctl (shm_id, IPC_RMID, (struct shmid_ds *)0) < 0)?
    ??? perror ("shmctl");

    一個測試過的實例
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/shm.h>
    #include <sys/ipc.h>
    #define SHM_MODE (SHM_R | SHM_W)
    #define SHM_SIZE 2048

    int main()
    {
    ?int segment_id, segment_size;
    ?char *shared_memory;
    ?pid_t pid;
    ?
    ?if((segment_id = shmget(IPC_PRIVATE, SHM_SIZE, SHM_MODE)) < 0)/*獲得共享內存標識符*/
    ??perror("shmget error!\n");
    ?if((shared_memory = shmat(segment_id, 0, 0)) == (void *)-1)/*進程和共享內存段相連接*/
    ??perror("shmat error!\n");
    ?printf("test1 send a message to share memory.\n");
    ?sprintf(shared_memory, "Hello test2\n");
    ?shmdt(shared_memory);/*脫離鏈接*/
    ?pid = fork();
    ?if(pid < 0)
    ??perror("Creating process error!\n");
    ?else if(pid > 0)
    ?{
    ??wait(NULL); /*父進程等待子進程結束*/
    ??shmctl(segment_id, IPC_RMID, 0);/*子進程結束,父進程將共享內存刪除*/
    ??exit(0);
    ?}
    ?else
    ?{???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
    ??if((shared_memory = shmat(segment_id, 0, 0)) == (void*)-1)/*子進程和共享內存連接*/
    ???perror("shmat error!\n");
    ??printf("test2 get a message form share memory:%s",shared_memory);
    ??shmdt(shared_memory);
    ?}
    }?????

    相關參考:http://blog.csdn.net/Apollo_zhc/archive/2006/06/01/768694.aspx

    posted on 2007-05-04 17:27 allic 閱讀(492) 評論(0)  編輯  收藏 所屬分類: linux/UNIX 應用開發
    主站蜘蛛池模板: 亚洲精品日韩专区silk| 亚洲无码在线播放| 中文文字幕文字幕亚洲色| 亚洲综合免费视频| 亚洲另类小说图片| 成年女人色毛片免费看| 亚洲日韩中文字幕一区| 国产精品高清全国免费观看| 亚洲av片在线观看| 亚洲人成电影网站国产精品| 国产高清对白在线观看免费91| 亚洲欧洲精品无码AV| 3344永久在线观看视频免费首页| 亚洲成a人片在线观| 成年女人毛片免费视频| 男男gay做爽爽免费视频| 中文字幕日韩亚洲| 日韩免费人妻AV无码专区蜜桃| 亚洲视频免费一区| 日韩一区二区三区免费体验| 一级毛片正片免费视频手机看 | 永久免费看mv网站入口| 特级毛片aaaa级毛片免费| 久久久久噜噜噜亚洲熟女综合| 福利免费在线观看| 亚洲男人电影天堂| 日本免费一区二区三区最新vr| 免费精品国产自产拍在线观看| 亚洲s色大片在线观看| 亚洲一区二区三区免费视频| 亚洲精品无码人妻无码| 亚洲欧洲日产国码av系列天堂| 免费观看美女用震蛋喷水的视频| 亚洲国产精品无码久久久秋霞1| 亚洲午夜国产精品无码| 嫖丰满老熟妇AAAA片免费看| 一级做a免费视频观看网站| 亚洲精品成人久久| 亚洲欧洲久久av| 最近免费中文字幕视频高清在线看| 牛牛在线精品观看免费正|