zoukankan      html  css  js  c++  java
  • 代码列表5.1 (shm.c) 尝试共享内存

    #include <stdoi.h>
    #include <sys/shm.h>
    #include <sys/stat.h>
    int main ()
    {
    int segment_id;
    char* shared_memory;
    struct shmid_ds shmbuffer;
    int segment_size;
    const int shared_segment_size = 0x6400;
    /* 分配一个共享内存块*/
    segment_id = shmget (IPC_PRIVATE, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR );
    /* 绑定到共享内存块*/
    shared_memory = (char*) shmat (segment_id, 0, 0);
    printf ("shared memory attached at address %p\n", shared_memory);
    /* 确定共享内存的大小*/
    shmctl (segment_id, IPC_STAT, &shmbuffer);
    segment_size = shmbuffer.shm_segsz;
    printf ("segment size: %d\n", segment_size);
    /* 在共享内存中写入一个字符串*/
    sprintf (shared_memory, "Hello, world.");
    /* 脱离该共享内存块*/
    shmdt (shared_memory);
    /* 重新绑定该内存块*/
    shared_memory = (char*) shmat (segment_id, (void*) 0x500000, 0);
    printf ("shared memory reattached at address %p\n", shared_memory);
    /* 输出共享内存中的字符串*/
    printf ("%s\n", shared_memory);
    /* 脱离该共享内存块*/
    shmdt (shared_memory);

    /* 释放这个共享内存块*/
    shmctl (segment_id, IPC_RMID, 0);
    return 0;
    }

    5.1.7 调试
    使用ipcs 命令可用于查看系统中包括共享内存在内的进程间通信机制的信息。指定-m
    参数以获取有关共享内存的信息。例如,以下的示例表示有一个编号为1627649的共享内存
    块正在使用中:
    % ipcs -m
    ------ Shared Memory Segments --------
    key shmid owner perms bytes nattch status
    0x00000000 1627649 user 640 25600 0
    如果这个共享内存块在程序结束后没有被删除而是被错误地保留下来,你可以用ipcrm
    命令删除它。
    % ipcrm shm 1627649

  • 相关阅读:
    css计数器
    使用area标签模仿a标签
    移动端判断触摸的方向
    简单圆形碰撞检测
    冒泡排序和二分查找算法
    基本数据类型float和double的区别
    HTML5-form表单
    代码块以及它们的执行顺序
    反射
    Excel表格的导入导出
  • 原文地址:https://www.cnblogs.com/michile/p/2908199.html
Copyright © 2011-2022 走看看