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

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

父级决定使用其堆中的内存并通过 sigqueue() 将数据的浅表副本(通过 sival_ptr 发送数据地址)发送给子级。由于两个进程具有不同的地址空间,是否允许子进程访问其父进程地址空间中的数据?如果通过指针对数据的任何访问都是非法的,那么 sival_ptr 的目的是什么?

4

1 回答 1

1

由于两个进程具有不同的地址空间,是否允许子进程访问其父进程地址空间中的数据?

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

也就是说,您的孩子继承了其父母记忆页面的副本。所以你可能会有这样的印象,它可以读取其父地址空间,而实际上孩子正在读取它自己的副本。

如果通过指针对数据的任何访问都是非法的,那么 sival_ptr 的目的是什么?

在它分叉之前阅读它的父母放在那里的东西。

于 2021-02-24T18:21:21.877 回答