shmget无法正常工作

#include  #include  #include  #include  #include  #include  #include  int main() { int i=0; int shmid; int *mem=(int*)malloc(10*sizeof(int)); key_t key; key=1234; pid_t pid; shmid=shmget(1234,sizeof(*mem), IPC_CREAT|0666); if(shmid==-1) { printf("shmget error\n"); return -1; } mem=shmat(shmid, NULL, 0); if(mem==(int*)-1) { printf("shmat error\n"); return -1; } for(;i<10;i++) { *(mem+i)=0; } pid=fork(); if(pid<0) { fprintf(stderr,"Fork Failed"); printf("array : "); } else if (pid==0) { printf("producer is created.\n"); printf("array : "); for(i=0;i<10;i++) { printf("%d ", *(mem+i)); } printf("\n"); for(i=0;i<10;i++) { *(mem+i)=i+1; } } else { wait(NULL); printf("consumer takes control of array.\n"); printf("array : "); for(i=0;i<10;i++) { printf("%d ", *(mem+i)); } printf("\n"); printf("consumer is done.\n"); printf("array : "); for(i=0;i<10;i++) { *(mem+i)=-1; printf("%d ", *(mem+i)); } printf("\ndone."); } free(mem); return 0; } 

父进程和子进程共享一个数组。 所以我决定在这些进程之间共享内存。 但是,shmget函数失败,这意味着如果我运行程序,打印值是shmget错误。 我不知道问题是什么。 我试着静态分配数组,动态分配数组等等。有什么问题? 我用Cygwin。

来自Cygwin的实施说明 :

XSI IPC函数semctl,semget,semop,shmat,shmctl,shmdt,shmget,msgctl,msgget,msgrcv和msgsnd仅在cygserver运行时可用。

有关Cygserver的更多信息,请访问: https ://cygwin.com/cygwin-ug-net/using-cygserver.html