话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???

话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???

在2.6的xx以后的fs/open.c好像就没有了sys_open的足迹,找了半天也找不到,但是它又的确的使用了,

困惑了n久之后,小小的发现了一个#define  SYSCALL_DEFINE3  SYSCALL_DEFINE3( openconst char  __user *,  filenameintflagsintmode)
1050 {
1051  long  ret;
1052 
1053  if ( force_o_largefile())
1054  flags |=  O_LARGEFILE;
1055 
1056 ret =  do_sys_open( AT_FDCWDfilenameflagsmode);
1057 /* avoid REGPARM breakage on x86: */
1058  asmlinkage_protect(3, ret,  filenameflagsmode);
1059  return ret;
1060 }

-----------------------------------
# define  SYSCALL_DEFINE0( nameasmlinkage  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 ( longSYSC## name( __SC_CAST##x( __VA_ARGS__)); \
130 } \
131 SYSCALL_ALIAS( sys## nameSyS## 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     用指定的信息产生一个编译时错误
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值