- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在用户空间程序中,我通过 mmap 分配一些内存,如下函数调用:
void *memory;
int fd;
fd = open(filepath, O_RDWR);
if (fd < 0)
return errno;
memory = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd, 0);
if (memory == MAP_FAILED)
return -1;
//syscall() goes here
在系统调用的内核空间中,我尝试将数据复制到内存映射区域,如下所示:
copy_to_user(memory,src,4096);
编辑:在帖子中添加了错误检查代码以进行澄清在这种情况下,copy_to_user()
调用反复失败,而如果我执行 memory = malloc()
,它总是会成功。
在这种情况下,我的 mmap 权限标志是否错误?
最佳答案
打开成功吗?那么 mmap 呢?目标文件足够大吗?可以通过用户空间的映射写入文件吗?
另外,重复的 4096 是一个强烈的打击,你的代码是错误的。用户空间应该传递预期的大小。
关于copy_to_user 无法将数据从内核复制到 mmap 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40705506/
我已经为我的内核模块实现了一个字符设备,并为其实现了一个读取函数。读取函数调用copy_to_user将数据返回给调用者。我最初以阻塞方式实现读取功能(使用 wait_event_interrupti
我的内核驱动程序中有一个 ioctl,需要在读取时返回一些数据。当我在用户空间中读回它时,它没有显示预期的结果。 用户空间片段: typedef struct abc_T { int size
当条件失败时,我正在尝试从内核空间向用户空间获取一些消息! 这是我的内核代码: #define MESSAGTOUSER 1 int ret_val; struct siginfo sinfo; pi
我需要将内核空间中的curr_task->pid,一个pid_t,复制到用户空间中一个结构体的域中,该结构体的域有很长的空间。由于这是一个不断扩大的转换,我预计不会出现任何问题。 但是,我收到了一个烦
我必须在 Linux 内核中添加一个系统调用,该系统调用将打印进程树,仅显示用户代码的 PID。我必须在这里使用 copy_to_user 。但我不明白这个功能的用途。你们中的任何人都可以举一个例子来
copy_to_user 和 copy_from_user 函数在 Linux 系统的什么地方定义和实现? 最佳答案 它在 asm/uaccess.h 中定义,例如,在 /usr/src/linux-
我一直被告知(在书籍和教程中)在将数据从内核空间复制到用户空间时,我们应该使用 copy_to_user() 并且使用 memcpy() 会给系统带来问题。最近我错误地使用了 memcpy(),它工作
我试图在内核模块读取函数中使用 copy_to_user,但无法将数据从内核复制到用户缓冲区。如果我做错了什么,谁能告诉我。我的内核版本是 2.6.35。我给出了内核模块的一部分以及用于测试它的应用程
我正在尝试将自定义系统调用添加到 linux 内核中。这是一个简单的代码: #include #include #include #include asmlinkage int sys_mys
我正在 Linux 内核中编写一个系统调用,它给定一个虚拟地址和一个无符号长指针,找到相应的页表条目,然后将其内容复制到无符号长指针中。这是系统调用: SYSCALL_DEFINE2(readMMU,
在用户空间程序中,我通过 mmap 分配一些内存,如下函数调用: void *memory; int fd; fd = open(filepath, O_RDWR); if (fd < 0) r
我了解到,当 copy_to_user 函数发生页面错误时,将使用异常表。 但我发现几乎所有的修复都会设置返回值并跳转到触发页面错误的指令之后的下一条指令。 内核在哪里做用户空间地址的映射工作? 我的
我有一个邮箱链接列表,我正在尝试将它们的 ID 复制到用户空间变量 mbxList,但打印不正确。 asmlinkage long sys_listMailboxes(unsigned long *
这个问题在这里已经有了答案: copy_to_user vs memcpy (2 个答案) 关闭 7 年前。 让我们考虑以下代码。对于阅读 Linux 设备驱动程序的人来说,上下文会很清楚。 简而言
我一直认为当内核通过 procfs 写入用户时,copy_to_user 是必要的。 虽然我忘了做一次(我使用了 snprintf),但一切正常。既然我注意到了,我就一直在寻找。我找到了 this l
为什么内核要使用copy_to_user函数? 直接操作用户空间的数据不行吗? 最佳答案 内核和用户空间应用程序具有不同的地址空间,因此复制到用户空间需要更改地址空间。每个进程都有自己的(用户)地址空
我正在尝试定义一个系统调用来修改传递给它的字符缓冲区。具体来说,像这样: ... asmlinkage int sys_mycall( char __user *buff, int len ) {
以下是我的简单驱动程序代码的摘录。 int vprobe_ioctl( struct file *filep, unsigned int cmd, void *UserInp) { case
我正在开发 Linux 驱动程序,发现在某些情况下 copy_to_user() 花费的时间比预期的要长得多。我想它可能正在等待 mm->mmap_sem 信号量,也许吧?在不利情况下似乎还有额外的
披露:我是 C 的新手。如果您能详细解释任何答案,我将不胜感激。 我正在编写一个 linux 内核模块,在我正在编写的其中一个函数中,我需要将一个结构复制到用户空间,如下所示: typedef str
我是一名优秀的程序员,十分优秀!