1
4

2 回答 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 回答