因此,我需要使用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
)发送回调用进程({ {1}}),在指向其数组的地址(who_e
)。
但是,这似乎不起作用。我觉得我必须误解一些关于消息的信息,和/或将地址从一个进程发送到另一个进程。不幸的是,虽然没有太多记录在线使用此m_in.m1_i1
功能来帮助我。任何人都可以提供任何指示吗?
此外,我必须在这里使用sys_vircopy
。
答案 0 :(得分:0)
没有旧D
| T
| S
段的痕迹,所以我猜这是MINIX 3.2或更新版本。您可能需要使用memory grants(a.k.a safecopies)来处理保护问题,而不是尝试使用较低级别的vircopy
。