以下是我尝试使用的代码,已成功构建, 执行时我收到以下错误: 无法将shmem附加到当前进程 :无效的参数
我用另一个键5678尝试了相同的程序,仍然是同样的错误。
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main(int argc,char * argv[],char * envp[])
{
key_t key = ftok("/usr/tmp");
int shmflag = IPC_CREAT|0666;
int shmid;
char * shm,*s;
if((shmid = shmget(key,27,shmflag)<0))
{
perror("unable to get shmem\n");
exit(-1);
}
//attaching a shmem.
if((shm = shmat(shmid,NULL,0)) == (char *)-1)
{
perror("unable to attach shmem to current process\n");
exit(-2);
}
s = shm;
strcpy(s,"Hi Pavan here");
*s = NULL;
while(*shm != '*')
sleep(1);
if((shmdt(shm))<0)
{
perror("unable to detach\n");
exit(-3);
}
exit(0);
}
ipcs -a的结果反映了我创建的共享记忆:
] ipcs -a | grep -i tstbld
q 554696745 0x34000002 --rw-rw-rw-tstbld staff tstbld staff 0 0 4194304 1638630 1638632 6:11:30 6:11:37 6:01:58
q 632291424 0x2c000002 --rw-rw-rw-tstbld staff tstbld staff 0 0 4194304 0 0 no-entry no-entry 6:11:13
m 659554320 0x2c000060 --rw-rw-rw-tstbld staff tstbld staff 0 27 733346 0 no-entry no-entry 9:54:16
m 887095320 0x0000162e --rw-rw-rw-tstbld staff tstbld staff 0 27 1568944 0 no-entry no-entry 9:15:46
你能不能让我知道我在这里失踪了什么。 如果我必须在特定的虚拟地址附加共享内存,我将如何知道哪些是可用于附加Shmem区域的正确可用地址。AIX 5.3上的最小SHMEM限制为1个字节,Max为某个TB。