【发布时间】:2015-12-26 13:52:55
【问题描述】:
你能帮帮我吗?我无法增加 Sherd 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;
}
提前非常感谢您...
【问题讨论】:
-
在
shmget失败时使用perror。另请阅读并喜欢使用shm_overview(7) 和sem_overview(7)。shmget的 SysV 共享内存可能已被弃用,kernel.shmmax未涵盖
标签: c shared-memory