:AIX 5.3上的shmat期间的参数无效

时间:2016-01-04 06:44:28

标签: c unix ipc shared-memory aix

以下是我尝试使用的代码,已成功构建, 执行时我收到以下错误: 无法将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。

0 个答案:

没有答案