Sharing memory between processes through the use of mmap()

前端 未结 3 2085
遇见更好的自我
遇见更好的自我 2020-12-05 10:43

I\'m in Linux 2.6. I have an environment where 2 processes simulate (using shared memory) the exchange of data through a simple implementation of the message passing mode.

相关标签:
3条回答
  • 2020-12-05 11:11

    That's not going to work.

    If you create a mapping after the fork(), it won't be the same in the other related process(es).

    You can't assume the sharing of pointers in this way.

    If you really want to do it this way (I would not recommend it!), you should mmap a big area before the fork(), then allocate somehow, buffers of a suitable size (without race conditions with other processes, of course!) and pass those pointers.

    Two related processes which call mmap() after a fork, may get the same pointer back, pointing at different memory. In fact this is extremely likely.

    0 讨论(0)
  • 2020-12-05 11:15

    Is it possible to attach that region of memory to the server POST forking, after the client creates it?

    MAP_ANONYMOUS|MAP_SHARED mapped memory can only be accessed by the process which does that mmap() call or its child processes. There is no way for another process to map the same memory because that memory can not be referred to from elsewhere since it is anonymous.

    Using shm_open() call it is possible to create named shared memory which can be referred to and mapped by unrelated processes.

    0 讨论(0)
  • 2020-12-05 11:23

    Just for anyone reading this question in 2018 and later. The solution is now to use memfd_create to create an anonymous file and use a unix socket to pass this file handle to the other process.

    memfd_create is a linux only syscall

    0 讨论(0)
提交回复
热议问题