因此,我需要使用 MINIX 内核调用sys_vircopy
将填充数组(int
)从我正在编写的系统调用中复制回调用过程。
当前设置如下,在调用过程中(省略了任何不重要的内容):
int *results = malloc(...); // allocate required mem
message m;
m.m1_i1 = *results;
// is this the correct way to send the address of the array via a message?
_syscall(..., MYSYSCALL, &m); // syscall to relevant server
因此,由于我无法直接发送int
数组(没有消息类型),因此我正在尝试在消息中发送数组的地址。
然后,在我的系统调用中:
int nelements;
int *results = &m_in.m1_i1;
// is this the correct way to receive the array at the address in the message?
// Some code here filling the array
sys_vircopy(SELF, *results, who_e, m_in.m1_i1, sizeof(int) * nelements);
// is this the correct way to send the address of the filled array...
// ...back to the address holding the array in the calling process?
所以在这里我尝试使用sys_vircopy
然后将我的数组的地址 (*results
), 从当前进程 (SELF
) 发送回调用进程 (who_e
),地址指向其数组 (m_in.m1_i1
)。
但是,这似乎不起作用。我觉得我一定误解了消息,和/或将地址从一个进程发送到另一个进程。不幸的是,网上没有太多关于使用这个sys_vircopy
功能的记录来帮助我。谁能提供任何指示?
此外,我必须在这里使用sys_vircopy
。
没有旧D
的痕迹 |T
|S
段,所以我想这是MINIX 3.2或更新的。您可能需要使用内存授予(又名安全副本)来处理保护问题,而不是尝试使用较低级别的vircopy
。