- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这里是返回值的说明。
unsigned long copy_from_user
(void *to, const void __user *from, unsigned long count)
返回值是还需要复制的内存量。
这到底是什么意思?如果返回值为 5,是否复制了 (count-5)
个字节?仅复制 (count-5)
字节的原因是什么?是不是因为to
的大小小于from
(那系统应该崩溃了吧)?
最佳答案
copy_from_user
函数可能会因各种原因(通常是无效地址)而失败,可能只复制部分请求的数据,甚至不复制任何数据。
函数返回 0 表示成功有一个约定(并未得到普遍遵守)。在 copy_from_user
的情况下,将结果定义为未复制的字节数允许它以相当简单的规则遵循此约定。
直觉上,它返回实际复制的字节数可能更有意义,但它的定义方式允许使用它的代码以与其他函数类似的方式测试错误成功返回 0。 (在许多情况下,复制失败多少字节并不重要;任何非零结果都只是一个错误。)
如果它返回一个小于 count
的非零值,表示部分复制,它可能意味着用户空间内存缓冲区在用户进程的地址空间,但超出了它的末尾。
关于linux - copy_from_user() 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23433936/
我正在尝试使用模块读取/写入内核内存,到目前为止读取部分正在工作。我有一个来自用户空间的程序,它打开我的模块创建的设备,并且可以从 x addr (内核内存地址)读取 n 个字节,并且这可以工作(正在
我在编译我的内核模块时遇到了一个警告,我无法解决这个问题。 首先看一下这个简化的代码: #define READ_CHUNK 100u static int _procfs_write(struct
我正在尝试编写一个 Open RG 内核模块,它在给定的时间间隔内向用户空间发送一条消息。为此,我需要内核在将存储此消息的用户空间中保存一个指向静态缓冲区的指针。我在将指针发送到内核时遇到问题。 用户
涉及的结构如下。 结构节点{ 诠释; 诠释乙; } struct ioctl_node { struct node **ptr; int count; //Stores
我正在阅读“The Linux Kernel Module Programming Guide”中的一段,我对下一段有一些疑问。 The reason for copy_from_user or ge
我正在阅读 LDD3。在 chapter 8 ,我无法理解这一段: An example of a function in the kernel that uses vmalloc is the cr
我有一个指向用户空间模式下的数据缓冲区的指针,现在我想使用“copy_from_user”函数将该数据的值复制到内核模式。 假设我的数据指针是“data.ptr.buffer”,它的大小是“dat
我只是想知道为什么 copy_from_user(to, from, bytes) 做真正的复制?因为它只是想让内核访问用户空间的数据,是否可以不移动数据而直接将物理地址映射到内核的地址空间?谢谢,
我正在尝试为保存整数“timer_interval”(全局变量)的 sysfs 文件创建一个存储函数。 static ssize_t sys_store(struct kobject *kobj, s
copy_from_user() 用于内核模块。所以我的理解是它在内核空间中运行。但是,在阅读此“仅用户上下文。此功能可能会休眠”后,我感到困惑。谁能给我一个解释? 最佳答案 短语“用户上下文”并不是
在 uaccess.h 中声明的 copy_from_user 函数是否修改了 (void __user *)from 指针?该指针在函数声明中未声明为 const,仅声明其指向的内容。 我问的原因是
这里是返回值的说明。 unsigned long copy_from_user (void *to, const void __user *from, unsigned long count)
我正在寻找将 PID 值从用户空间复制到内核空间的方法,这是我的代码快照。 内核模块: #include #include #include #include #include #inclu
这个问题在这里已经有了答案: Why do you have to use copy_to_user()/copy_from_user() to access user space from the
我正在尝试使用此函数将缓冲区从用户复制到内核中的缓冲区。两个缓冲区都已分配。我使用 while 以防第一次尝试时未复制所有字节。但由于某种原因,没有复制任何内容,并且程序卡在 while 循环中。原因
我有以下系统调用: long do_print(int n, char *p){ char tmp[n]; //allocate array of n bytes int ret = copy
我试图在 Linux 中编写一个加密驱动程序,但是当我加密字符串并使用 copy_from_user() 将其复制到缓冲区时,它不起作用并且 k 值是字符串中的字符数 如果我将 copy_from_u
我使用在 Mint Linux 下运行的 Linux 内核 v4.0.5 开发了一个简单的线规程。 tty_ldisc_ops 结构如下所示: static struct tty_ldisc_ops
我正在尝试使用以下函数将值从用户空间复制到内核空间: static ssize_t device_write(struct file *filp, const char *buff, size_t l
我正在编写一个 linux 内核驱动程序,对于将数据发送到用户空间或从用户空间读取数据的每个函数,我正在使用 copy_to_user() 和 copy_from_user()。我的问题是:如果我只是
我是一名优秀的程序员,十分优秀!