linux-kernel - 有 copy_from_user 时 get_user 的应用

标签 linux-kernel operating-system kernel

在Linux内核编程中,我看到 get_user copy_from_user 从用户空间执行读取,较早的读取固定的 1、2 或 4 个字节,而后者从用户空间读取任意数量的字节。 get_user 需要什么? copy_from_user 是否在 get_user 之后出现,因此保留 get_user 是为了向后兼容? get_user 是否有特定的应用程序或者它现在已经过时了? put_user 和 copy_to_user 的相同查询。

最佳答案

你可以考虑

copy_from_user(dest, src, size);

作为某种
memcpy(dest, src, size);

和关于
get_user(x, ptr);

作为某种简单的分配:
x = *ptr;

就像一个简单的赋值比 memcpy() 更干净(用于代码理解),更短和更快的方法函数调用,get_usercopy_from_user 更干净、更短、更快.

最广为人知的情况是,当数据大小恒定且较小时(因此 get_user 适用),是 ioctl设备的实现。您可以找到许多 get_user grep 的用法-ing 内核源代码 get_user ,或使用在线内核代码搜索服务,如 Linux Cross Reference .

关于linux-kernel - 有 copy_from_user 时 get_user 的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182877/

相关文章:

c - 向 linux 内核添加新的系统调用似乎不起作用

linux - 为什么 HashiCorp 的 Vault 需要启用 ipc_lock 功能?

linux - 在 linux 中,所有内核进程共享同一个内核堆栈,每个用户进程都有自己的堆栈,对吗?

linux - 整体内核的效率

c - FreeBSD Kmod 找不到 sys/param.h

c - 如果我们在 SMP 上的中断处理程序中休眠会发生什么

c - 查找最大管道数的函数

linux - 在 Linux 上解释 uname -a 命令?如何找到操作系统的供应商名称?

java - 哪一种主要操作系统最适合快速引导和启动 Java 应用程序?

macos - Mac OS X 和 BSD 的关系有多密切?