注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧笔临风

己有能,勿自私!

 
 
 

日志

 
 
 
 

linux c 简单的共享内存链表  

2017-02-09 22:55:11|  分类: C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
直接上源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>

#define CHAIN_LEN 8 * 1024

#pragma pack(4)
typedef struct {
    int data;
    int next;
} node;
#pragma pack()


void fillshm(int shmid) {
    int i;
    node *p, *head;
    head = (node*)shmat(shmid, NULL, 0);
    if (head == (node *)(-1)) {
        perror("shmat");
        exit(1);
    }

    printf("writing to shared memory\n");
    p = head;
    for(i = 0; i < CHAIN_LEN; i++) {
        p->data = i;
        p->next = (i + 1);
        p = head + p->next;
    }
}

void printshm(int shmid) {
    int i;
    node *head, *p;

    head = (node *) shmat(shmid, NULL, 0);
    if(head == (node *) (-1)) {
        perror("shmat");
        exit(1);
    }

    p = head;
    for(i = 0; i < CHAIN_LEN; i++) {
        printf( "%d\n", p->data);
        p = head + p->next;
    }
}

int main() {
    int shmid;
    key_t key = 0xABCD1234;

    // see if the memory exists and print it if so
    if ((shmid = shmget (key, 0, 0)) != -1) {
        printshm( shmid );
    } else {
        // didn't exist, so create it
        if((shmid = shmget (key, sizeof(node) * CHAIN_LEN, IPC_CREAT | 0600)) == -1 ) {
            perror("shmget");
            exit(1);
        }

        printf("shmid = %d\n", shmid);

        fillshm(shmid);
        printf("Run another instance of this app to read the memory... (press a key): " );
        getchar();

        // delete it
        if (shmctl (shmid, IPC_RMID, NULL) < 0 ) {
            perror("semctl");
            exit(1);
        }
    }

    return 0;
}
  评论这张
 
阅读(10)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017