我使用了以mips为单位的posix共享内存。程序抱怨:Posix共享内存导致总线错误
i: 516095
i: 516096
Bus error
在x86中执行相同的程序是好的。我想获得内核最大支持共享内存大小。
int ret;
int bufsize = 517120;
shmfd = shm_open(NAME_SHM, O_RDWR|O_CREAT|O_EXCL, FILE_OP);
shm_unlink(NAME_SHM);
if(shmfd < 0) {
sys_err("Create share memory failed: %s\n", strerror(errno));
exit(-1);
}
ret = ftruncate(shmfd, bufsize);
if(ret < 0) {
sys_err("Alloc share memory failed: %s\n", strerror(errno));
exit(-1);
}
char *ptr = mmap(NULL, bufsize,
PROT_READ|PROT_WRITE, MAP_SHARED, shmfd, 0);
if(ptr == MAP_FAILED) {
sys_err("Mmap failed: %s\n", strerror(errno));
exit(-1);
}
struct stat buf;
fstat(shmfd, &buf);
printf("size: %d, total: %d\n", buf.st_size, bufsize);
int i;
for(i = 0; i < bufsize; i++) {
printf("i: %d\n", i);
ptr[i] = 0;
}
我有检查IPCS,但男子说:
Linux的IPCS工具是不是在POSIX IPCS工具完全兼容。
[email protected]:~# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 3
max total shared memory (pages) = 2097152
min seg size (bytes) = 1
[email protected]:~# cat /proc/sys/kernel/shmmax
3740
[email protected]:~# cat /proc/sys/kernel/shmall
2097152
[email protected]:~# cat /proc/sys/kernel/shmmni
4096
最大赛格大小为3K,但是我的程序可以使用(一千零二十四分之五十一万六千零九十六= 504K)?
我很困惑sysv ipc vs posix ipc?
为什么'shm_unlink'被这么早叫什么名字? – 2014-10-20 10:45:57