MST

星途 面试题库

面试题:C语言中共享内存的基本操作

在C语言中,简述共享内存的创建、映射和解除映射的函数分别是什么,并简要说明每个函数的作用及参数含义。
28.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 创建共享内存函数shmget
    • 函数作用:创建一个新的共享内存段或获取一个已存在的共享内存段标识符。
    • 函数原型int shmget(key_t key, size_t size, int shmflg);
    • 参数含义
      • key:是一个key_t类型的键值,用于标识共享内存段。通常使用ftok函数生成,这个值在系统范围内唯一标识共享内存段。如果keyIPC_PRIVATE,则创建一个私有的共享内存段,只有创建者和其子孙进程能访问。
      • size:指定共享内存段的大小,以字节为单位。如果创建新的共享内存段,这个值必须大于0;如果获取已存在的共享内存段,这个值可以为0。
      • shmflg:是一组标志位,用于指定共享内存段的创建方式和访问权限。它由9位权限掩码(同文件权限设置,如0666)和一些可选的标志(如IPC_CREAT表示如果共享内存段不存在则创建,IPC_EXCLIPC_CREAT一起使用,若共享内存段已存在则返回错误)组成。
  2. 映射共享内存函数shmat
    • 函数作用:将共享内存段连接到调用进程的地址空间。
    • 函数原型void *shmat(int shmid, const void *shmaddr, int shmflg);
    • 参数含义
      • shmid:是共享内存段的标识符,由shmget函数返回。
      • shmaddr:指定映射的地址。如果为NULL,系统会自动选择一个合适的地址;如果不为NULL,且shmflg中没有指定SHM_REMAP,则系统会尽量将共享内存段映射到该地址。
      • shmflg:标志位,用于指定映射的方式。SHM_RDONLY表示以只读方式映射,默认是以读写方式映射。
  3. 解除映射共享内存函数shmdt
    • 函数作用:将共享内存段从调用进程的地址空间分离。
    • 函数原型int shmdt(const void *shmaddr);
    • 参数含义
      • shmaddr:是共享内存段在调用进程地址空间中的起始地址,即shmat函数返回的地址。成功解除映射后,该地址不再能被进程访问。