无法增加共享内存的大小

时间:2015-12-26 13:52:56

标签: c shared-memory

你能帮帮我吗?我不能增加我的谢尔德记忆的大小。代码在Linux上用C语言编写。

我需要65536个字节,但似乎只允许49152 ...如果我增加它,shmget会失败...(在我的代码中:shmid < 0) 我试图找出我的最大共享内存大小并增加它:

sysctl -w kernel.shmmax=2147483648

但这没有帮助,初始化再次失败。

这是我的代码:

 #define SHM_KEY                 9877

 #define SHM_SIZE                65536

int SHM_init (int shmid, char** shm, key_t key, long int size) {

    /* Create a new (System V) shared memory segment of the specified size */
    shmid = shmget(key, SHM_SIZE, IPC_CREAT|0777);

    /* Check if SHM creation was successful */
    if (shmid < 0) {
        /* DBG: Debug message to show which point of the program has been passed */
        DBG_PRINT("C\n");

        /* Check if creation failed because of already existing SHM */
        if (EEXIST == errno) {
            /* DBG: Debug message to show which point of the program has been passed */
            DBG_PRINT("CC\n");
            /* Delete already existing SHM with shmctl */
            shmctl(shmid, IPC_RMID, NULL);
        } else {
            /* DBG: Debug message to show which point of the program has been passed */
            DBG_PRINT("CCC\n");
        }

        /* Creation and initialization of SHM failed */
        return -1;
    }
    /* Attach the SHM data pointer to the previously created SHM segment */
    *shm = shmat(shmid, NULL, 0);

    if(*shm == (char *) -1) {
        /* Attaching failed */
        return -1;
    }
    DBG_PRINT("Shared Memory Initialization successful\n");
    /* Creation and initialization of shared memory was successful */
    return 0;
}

提前非常感谢你......

1 个答案:

答案 0 :(得分:1)

This topic可能有所帮助。 如果使用ipcs -l增加shmmax,sysctl -w kernel.shmmax=2147483648会返回什么?