我想传递一个指针(我将一个带有mmap的数据存储在内存中的文件)到使用fork + exec生成的进程,但我仍然坚持如何将指针传递给exec()生成的进程? / p>
UPDATE1:
感谢您的输入,我确实使用共享内存使用带有MAP_INHERIT标志的mmap创建它:
使用mmap()函数创建的每个映射文件和共享内存区域 通过成功调用任何exec函数来取消映射,除了那些 使用MAP_INHERIT选项映射的区域。用的地图映射 MAP_INHERIT选项仍保留在新过程映像中。
来源:http://www.uwm.edu/cgi-bin/IMT/wwwman?topic=exec(2)&msection=
UPDATE2:
这是家庭作业练习,但我认为我必须停止思考指针并思考IPC本身。我想我会尝试在子进程中映射相同的文件。
短代码示例非常感谢。
提前感谢您的帮助。
答案 0 :(得分:9)
如果使用共享内存,则无法传递指针。指针将包含虚拟地址,该地址不同于一个进程。您必须根据共享内存区域的开头交换偏移值。
如果您不使用共享内存,则无法交换任何类型的指针:其他进程将无法访问进程的内存。
答案 1 :(得分:1)
这不起作用。新进程也应该mmap
文件本身。
答案 2 :(得分:1)
生成的进程可能应该打开一个回到父进程的管道,并询问映射共享内存段所需的数据。
或者你可以使用boost :: interprocess为你创建一个共享内存段,并实际传递地址(它可以进行映射)。您可以自己阅读该文档:http://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html
答案 3 :(得分:1)
考虑将偏移量传递给文件中的内存到子进程。如果偏移量为零,则不要打扰,但如果需要将“指针”传递给文件的一部分,则将其转换为起始地址的偏移量,并将其传递给子节点。然后,子项可以通过将偏移量添加到为映射文件获取的地址来获取数据。
答案 4 :(得分:0)
只需在命令行参数或环境变量中传递文本。
答案 5 :(得分:0)
这是一个很大的领域,你有很多选择。
找到这些解决方案的关键是搜索Linux inter processor communication或Linux IPC之类的内容。
IPC的介绍也可以在Advance Linux Programming(ISBN:0-7357-1043-0)等书中找到。