在2.6的xx以后的fs/open.c好像就没有了sys_open的足迹,找了半天也找不到,但是它又的确的使用了,
困惑了n久之后,小小的发现了一个#define
SYSCALL_DEFINE3
SYSCALL_DEFINE3(
open,
const char
__user *,
filename,
int,
flags,
int,
mode)
1050 {
1051
long
ret;
1052
1053
if (
force_o_largefile())
1054
flags |=
O_LARGEFILE;
1055
1056 ret =
do_sys_open(
AT_FDCWD,
filename,
flags,
mode);
1057 /* avoid REGPARM breakage on x86: */
1058
asmlinkage_protect(3, ret,
filename,
flags,
mode);
1059
return ret;
1060 }
-----------------------------------
#
define
SYSCALL_DEFINE0(
name)
asmlinkage
long
sys_##
name(
void)
99 #
define
SYSCALL_DEFINE1(
name, ...) SYSCALL_DEFINEx(1, _##
name,
__VA_ARGS__)
100 #
define
SYSCALL_DEFINE2(
name, ...) SYSCALL_DEFINEx(2, _##
name,
__VA_ARGS__)
101 #
define
SYSCALL_DEFINE3(
name, ...) SYSCALL_DEFINEx(3, _##
name,
__VA_ARGS__)
102 #
define
SYSCALL_DEFINE4(
name, ...) SYSCALL_DEFINEx(4, _##
name,
__VA_ARGS__)
103 #
define
SYSCALL_DEFINE5(
name, ...) SYSCALL_DEFINEx(5, _##
name,
__VA_ARGS__)
104 #
define
SYSCALL_DEFINE6(
name, ...) SYSCALL_DEFINEx(6, _##
name,
__VA_ARGS__)
105
#
define
SYSCALL_DEFINEx(x,
name, ...) \
124
asmlinkage
long
sys##
name(
__SC_DECL##x(
__VA_ARGS__)); \
125
static inline long
SYSC##
name(
__SC_DECL##x(
__VA_ARGS__)); \
126
asmlinkage
long
SyS##
name(
__SC_LONG##x(
__VA_ARGS__)) \
127 { \
128
__SC_TEST##x(
__VA_ARGS__); \
129
return (
long)
SYSC##
name(
__SC_CAST##x(
__VA_ARGS__)); \
130 } \
131 SYSCALL_ALIAS(
sys##
name,
SyS##
name); \
132
static inline long
SYSC##
name(
__SC_DECL##x(
__VA_ARGS__))
-------------------------------------------------------
##表示
将两个相邻的宏标记连接成一个整体标记,所以当第一次替换后成为
SYSCALL_DEFINEx(2, _open,...),然后再次替换对于
asmlinkage
long
sys##
name(...);
执行替换后变成
asmlinkage
long sys_open(....);
再附上常用的预处理器宏:
#define 定义一个预处理器宏
#undef 取消一个预处理器宏
#include 插入另一个源文件的文本
#if 测试一个常量表达式的值
#ifdef 测试如果一个宏已被定义
#ifndef 测试如果一个宏没有被定义
#else 测试失败后
#endif 终止条件文本
#line 提供用于编译器信息的行号
#elif 与else if相似
defined 判断一个宏是否被定义,已定义返回1,否则返回0,其与#if和#elif联用
# 将#后的宏标记转化为字符串
## 将两个相邻的宏标记连接成一个整体标记
#pragma 指定依赖编译器的信息
#error 用指定的信息产生一个编译时错误
话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
最新推荐文章于 2022-05-14 12:23:43 发布