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

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/michile/p/2908199.html
Copyright © 2011-2022 走看看