2011-05-09 74 views
0

我只是试图在两个进程之间共享一个整数,但是内存段在程序1中初始化并在程序4中使用。这里是程序1中的初始化:简单地在一个共享内存段中存储一个整数:C

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

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

简单,我假设,但我是一个与IPC的大时间noob。而在C许多其他的事情....

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

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中的整数回归?

回答

4

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

+0

感谢那 :) – Josh 2011-05-09 03:57:56

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中的整数回归?

指针本身,除非共享内存区域发生在其他程序中完全相同的虚拟内存地址加载是没有用的:你可能甚至不希望尽量安排是 - 相反,让另一个程序(hw11-4)加载共享内存段并让操作系统选择虚拟内存地址,然后只需查看int的地址即可。因此,hw11-4需要通过相同的共享内存密钥(例如作为命令行参数),本身使用shmget来打开并获取密钥,然后shmat将共享内存段映射到内存中....