只需在共享内存段中存储整数:C

时间:2011-05-09 03:41:22

标签: c ipc shared-memory

我只想尝试在两个进程之间共享一个整数,但是内存段在程序1中初始化并在程序4中使用。这是程序1中的初始化:

shmid = shmget(key, sizeof(int*), 0666 | IPC_CREAT);
int *data = (int *)shmat(shmid, (void*)0,0);

这里我得到一个警告“从不同大小的整数转换为指针”。哎呀。

简单,我假设,但我是IPC的大时间菜鸟。还有很多其他的事情......

然后我把它传递给另一个程序:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg, semarg, pipe_from_p2_2, pipe_to_p5_2);

不知道如何在另一边访问它。如何在程序4中获取int?

2 个答案:

答案 0 :(得分:4)

很确定你错过了定义shmat()的标头,因此编译器猜测shmat返回一个int(不是指针)。

答案 1 :(得分:1)

  

这里我得到一个警告“从不同大小的整数转换为指针”。哎呀。

尝试使用NULL而不是(void*)0

  

然后我把它传递给另一个程序:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg,
                      semarg, pipe_from_p2_2, pipe_to_p5_2); 
  

不知道如何在另一边访问它。如何在程序4中获取int?

指针本身没有用,除非共享内存区域恰好被加载到另一个程序中完全相同的虚拟内存地址:你可能甚至不想尝试安排 - 而是让其他程序(hw11-4)加载共享内存段并让操作系统选择虚拟内存地址,然后只查看int的地址。因此,hw11-4需要传递相同的共享内存密钥(例如作为命令行参数),并且本身使用shmget打开并获取密钥,然后shmat进行映射,共享内存段进入内存....