话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
来源:互联网 发布:阿里云连接器 编辑:程序博客网 时间:2024/04/27 23:00
话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
在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 用指定的信息产生一个编译时错误
困惑了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 不见了???
- 话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
- sys_open/sys_read/sys_umount/sys_mount
- Linux--Sys_Read系统调用过程分析
- Linux--Sys_Read系统调用过程分析
- Linux内核中的系统调用
- Linux内核中的系统调用
- linux内核sys_read流程分析
- linux内核sys_open源代码分析
- Linux--Sys_Read系统调用过程分析 http://blog.csdn.net/guopeixin/article/details/5962489
- linux内核中的dup系统调用
- Linux VFS中sys_open,sys_read,sys_readv,sys_write,sys_writev关系 2 http://blog.chinaunix.net/uid-2836
- 在内核中创建文件 filp_open/sys_open
- 在内核中创建文件 filp_open/sys_open
- 在内核中创建文件 filp_open/sys_open
- 在内核中创建文件 filp_open/sys_open
- 在内核中创建文件 filp_open/sys_open
- 在内核中创建文件 filp_open/sys_open
- POJ 1636(连通分量+DP)
- 总结一些Objective-C的self.用法
- 谷歌员工的“腐败”生活
- Struts2的Action访问Servlet对象
- codelite link mac osx framework
- 话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
- jsp页面格式话时间的一些useful标签
- 知识树
- 深度解析线程同步
- Android工程直接调用monkey源码进行压力测试
- Glibc
- 从用户登录学习js验证+js控制表单提交 .
- 嵌入式学习历程
- ZOJ 3591 Nim (NIM博弈+统计