【问题标题】:Pointer types in cc中的指针类型
【发布时间】:2015-12-03 13:03:29
【问题描述】:

我正在尝试将 int[] 的地址传递给系统调用。但是消息只有字符指针字段。

我尝试将 int 指针转换为 char 指针并再次转换,但数组中的结果不正确。

int pidarray[j];
m.m1_p3 = (char*)pidarray;

我还尝试将数组的地址存储为整数并通过消息整数字段传递它。

int pidarray[j];
m.m1_i3 = &pidarray;

编辑:

这将是我创建的系统调用,旨在用 pid 填充数组并将数据复制回进程,因此我需要传递数组的地址。我把系统调用称为so,

_syscall(PM_PROC_NR, GETCHILDPIDS, &m);

它填充一个数组并尝试将其复制回调用进程拥有的内存空间。这样做是:

sys_vircopy(SELF, (vir_bytes) &test, who_e,(vir_bytes) m_in.m1_i3, sizeof(test));

其中 test 是一个 int[]。

如何以这种格式发送 int[] 的地址?

【问题讨论】:

  • 如果您认为问题不重复,请编辑您的问题。为什么要使用系统调用?显示正在执行系统调用的代码。

标签: c linux pointers


【解决方案1】:

在 C 中,数组被分解为指针,特别是当作为参数传递时。

所以只要把它当作一个指针来处理。您可能需要更改新系统调用的接口(例如,可能给它一个指针和一个大小,或者约定 pidarray 应该为 0 终止)。

顺便说一句,听起来你的系统调用没用。您可以在 Linux 上的用户区通过现有的 syscalls(2) 使用 /proc/ 完成所有这些操作(请参阅 proc(5)...)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多