问问题
1572 次
2 回答
3
这就是问题:
shmadd="Hello";
这会将shmadd
指针更改为指向内存中的字符串。我认为您打算将字符串复制到共享内存中。为此,您将执行以下操作:
strcpy(shmadd,"Hello");
另请注意,您的错误检查是错误的,应该是:
if((shmadd=shmat(shmid,0,0)) == (void *)-1) { ... error ... }
你的权限应该是八进制的,而不是十六进制的:
if((shmid=shmget(IPC_PRIVATE,BUFSZ,0666)) < 0)
于 2013-08-15T03:35:35.807 回答
1
您在此行中对 shmadd 错误的检查不正确:
if((shmadd=shmat(shmid,0,0)) < (char *)0)
您需要根据手册页对 -1 进行显式比较,因为对指针的 -1 强制转换成为无符号值(在 32 位系统上为 0xFFFFFFFF)。用这一行替换该行:
if((shmadd=shmat(shmid,0,0)) == (char *)-1)
你会得到一个权限被拒绝的错误,因为你不是 root。
于 2013-08-15T04:14:18.300 回答