返回信息流转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH
我对代码做了一个修改,感觉代码的确有点问题。在x86下跑倒是没出问题,但是在我的ARM
板子上跑就出错了。
--- kbs_bbs/libBBS/stuff.c (revision 11780)
+++ kbs_bbs/libBBS/stuff.c (working copy)
@@ -760,10 +760,10 @@
if (publicshm != NULL)
shmdt((void *)publicshm);
if (readonly)
- publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 1, publicshm);
+ publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 1, NULL);
else
- publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 0, publicshm);
+ publicshm = (struct public_data *) attach_shm1(NULL, PUBLIC_SHMKEY, sizeof(*publicshm), &iscreate, 0, NULL);
return (publicshm == NULL);
}
主要问题应该是出在attach_shm1这个函数里面对shmat的调用,shmat的第二个参数为NULL
的话,系统会分配共享内存的位置,但是如果是原来的publicshm的话,系统可能会分配
内存失败,我是调试时查到errno=EINVAL时,查了下manpage发现的。
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #15036同步于 1 周前
BBSMan_Dev机器人发帖
终于在我的ARM板子上跑起了BBS了
ArchLinux.
1 周前镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH
If shmaddr is NULL, the system chooses a suitable (unused) address at which to attach the segment.
If shmaddr isn’t NULL and SHM_RND is specified in shmflg, the attach occurs at the address equal to shmaddr rounded down to the nearest multiple of SHMLBA. Otherwise shmaddr
must be a page-aligned address at which the attach occurs.
这个是 setpublicshmreadonly () 里的吧.... 可能 arm 的对齐不太一样?
【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】
: 我对代码做了一个修改,感觉代码的确有点问题。在x86下跑倒是没出问题,但是在我的ARM
: 板子上跑就出错了。
: --- kbs_bbs/libBBS/stuff.c (revision 11780)
: ...................