通过 sigqueue 将数据从 parent 发送到 child

Sending data from parent to child through sigqueue

int sigqueue(pid_t pid, int sig, const union sigval value);

union sigval {
  int sival_int;
  void *sival_ptr;
};

parent 决定使用其堆中的内存,并通过 sigqueue() 将数据的浅拷贝(通过 sival_ptr 发送数据地址)发送到 child。由于两个进程有不同的地址 space,是否允许 child 访问其 parent 的地址 space 中的数据?如果通过指针访问数据是非法的,sival_ptr 的目的是什么?

Since two process have different address space, is the child allowed to access data which is in address space of its parent?

不,除非你的 child 是作为线程创建的,但你的句子让我假设你是用常规的 fork() 创建它的。

也就是说,您的 child 继承了其 parent 的内存页的副本。所以你可能会有这样的印象,它可以读取其 parent 的地址 space,而实际上 child 正在读取它自己的副本。

What is the purpose of sival_ptr if any access of data through the pointer will be illegal?

正在读取其 parent 在分叉之前放在那里的内容。