gpt4 book ai didi

c - 为什么 uaccess.h 中的 access_ok 宏的实现没有使用它的所有参数?

转载 作者:行者123 更新时间:2023-12-01 01:25:31 24 4
gpt4 key购买 nike

来自/urs/src/linux-header-#version/arch/x86/include/asm/uaccess.h 的以下代码定义了宏 access_ok,并将“type”作为参数。但是,这个宏的定义并没有在任何地方使用这个参数。

#define access_ok(type, addr, size) (likely(__range_not_ok(addr, size) == 0))

我错过了什么吗?“类型”应该有 2 个可能的值: #define VERIFY_READ 0 #define VERIFY_WRITE 1

我唯一的解释是这是为了保持一致性。 (在不同的平台上,access_ok的实现可能会考虑“类型”)。

最佳答案

宏的这个实现没有使用它是一个实现细节。 access_ok 逻辑上 所做的是根据所有三个参数给出的答案;恰好 x86(和大多数其他平台)的答案实际上不需要考虑 type 。 (在某些平台上,实现不考虑任何参数,只返回 1。在其他平台上,例如 UML,确实使用了 type。 ) access_ok是抽象API的一部分,应该是跨平台一致的,而type是Linux对其抽象模型中内存的一个属性,所以该参数是必须的。

“一致性”是一个正确的结论,但却是从错误的前提得出的:API 由系统的抽象、可移植模型决定,该模型包括 type。在这种情况下,实现的责任是符合 API,而不是 API 屈服于实现的细节。

关于c - 为什么 uaccess.h 中的 access_ok 宏的实现没有使用它的所有参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com