MST

星途 面试题库

面试题:C语言中Linux共享内存分配基础

在Linux环境下使用C语言进行共享内存分配,简述shmget函数的主要参数及其作用,并写出一段简单代码来创建一个大小为1024字节的共享内存段。
27.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. shmget函数主要参数及其作用
    • key_t key:用于标识共享内存段的键值。它可以是一个任意的整数值,但通常使用ftok函数生成。这个键值在系统范围内唯一标识一个共享内存段,不同进程可以通过相同的键值来访问同一个共享内存段。
    • size_t size:指定共享内存段的大小,以字节为单位。
    • int shmflg:共享内存的标志位。它可以是一些位掩码的组合,常见的如IPC_CREAT(如果共享内存段不存在则创建它)、IPC_EXCL(与IPC_CREAT一起使用,若共享内存段已存在则出错),还可以指定访问权限,如0666表示可读可写权限。
  2. 创建大小为1024字节共享内存段的简单代码
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>

#define SHM_SIZE 1024

int main() {
    key_t key;
    int shmid;
    // 使用ftok生成一个键值
    key = ftok(".", 'a');
    if (key == -1) {
        perror("ftok");
        return 1;
    }
    // 创建共享内存段
    shmid = shmget(key, SHM_SIZE, IPC_CREAT | 0666);
    if (shmid == -1) {
        perror("shmget");
        return 1;
    }
    printf("共享内存段创建成功,ID为: %d\n", shmid);
    // 可以在这里进行其他操作,如将共享内存段附加到进程地址空间等
    // 最后删除共享内存段(这里只是示例,实际应用可能在合适的地方删除)
    if (shmctl(shmid, IPC_RMID, NULL) == -1) {
        perror("shmctl IPC_RMID");
        return 1;
    }
    return 0;
}