【问题标题】:Checking if a shared memory exists and if it does access it检查共享内存是否存在以及是否访问它
【发布时间】:2016-12-07 15:24:44
【问题描述】:

我有另一个程序 1,我在其中创建了一个共享内存,我有一个程序 2,我想检查是否已创建共享内存,如果没有,则打印错误并且不执行任何操作,如果已创建,则访问它。 如果之前已经创建了共享内存,那么它可以正常工作并且我可以访问它,但我遇到的问题是,如果尚未创建共享内存,那么程序 2 会创建共享内存而不是打印错误,而我没有不希望发生这种情况。 任何帮助将不胜感激,请询问任何可能有用的信息,谢谢!

void main(){

int sm_id;
sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | IPC_EXCL | 0666);
if(sm_id>0){
    perror("Shared memory has not been created yet");
    exit(1);
}else{
    sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | 0666);
    list = (User *)shmat(sm_id,0,0);
    exit_on_null(list, "Exit on null(error attach)");
}

}

【问题讨论】:

  • 也许只是在没有IPC_CREAT标志的情况下调用shmget
  • 您确定要使用 System V 共享内存吗? POSIX 共享内存更容易使用。检查shm_open
  • 它奏效了,我使用 shmget 因为它用于一个项目,而且教授们使用它...无论如何感谢您的提示

标签: c shared-memory


【解决方案1】:

不要使用IPC_CREAT 标志。如果该共享内存不存在,它将返回错误ENOENT

查看手册页以获取更多信息..

SHMGET

【讨论】:

  • 它起作用了,我认为我们总是必须使用 IPC_CREAT 才能使它起作用,因为我没有看到没有它的示例。感谢您的帮助!
  • @Livernal :-)... 检查手册页,您将从那里获得更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2015-04-29
  • 2022-11-25
  • 1970-01-01
相关资源
最近更新 更多