gpt4 book ai didi

c - shmget 不工作

转载 作者:太空狗 更新时间:2023-10-29 15:01:57 27 4
gpt4 key购买 nike

#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。

最佳答案

来自 Cygwin's Implementation Notes :

The XSI IPC functions semctl, semget, semop, shmat, shmctl, shmdt, shmget, msgctl, msgget, msgrcv and msgsnd are only available when cygserver is running.

更多关于 Cygserver 的信息:https://cygwin.com/cygwin-ug-net/using-cygserver.html

关于c - shmget 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com