0

我是共享内存的新手,我想出了以下代码:

int main()
{
  int perm=S_IRWXU|S_IRWXG|S_IRWXO;
  int fd=shmget(IPC_PRIVATE,1024,IPC_CREAT|perm);
  if(fd<0)
  {
    printf("error");
    _exit(0);
  }
  int* sum=(int*)shmat(fd,0,0);
  if(*sum==1)
  {
    printf("error\n");  
    _exit(0);
  }
  *sum=0;
  printf("asjjsad=%d",*sum);
  return 0;
}

当我运行它时,我得到了错误的系统调用

怎么了?

我正在尝试将 sum 分配给 0,并让子进程计算一个值,例如 sum1。然后我必须尝试将 sum1 添加到 sum。

你怎么做到这一点?

4

1 回答 1

1

假设 OP 的问题发生在 Cygwin 上,Cygwin 的实施说明中的以下段落会有所帮助:

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

于 2013-05-02T15:04:57.843 回答