1
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/wait.h>
#include <sys/shm.h>
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。shmget不工作
你確實是知道'的sizeof(* MEM)'給** **一個'int'的大小? –
我覺得這一點很奇怪,所以我改變了我的代碼shmget(key,100,IPC_CREAT | 0666);代替。但仍然有錯誤信息 –
這個調用'mem = shmat(shmid,NULL,0);'泄漏內存分配在這裏:'int * mem =(int *)malloc(10 * sizeof(int));'。 – alk