好消息!!!网站已上线积分开通会员的功能啦!阅读站内文章不过瘾,试试“查找全网同类文章”功能,可以畅读全网的文章哦!
首页  >   经验  >   Linux源码笔记——感觉写的巧妙的代码

Linux源码笔记——感觉写的巧妙的代码

凌风 2018-12-19 17:33:22 81542
Linux   内核  
简介本文的例子来源于Linux内核,感觉很新颖,别出心裁,很有新意,故提出来分享给大家。

首先自动化生成无参函数与有参函数:

#define _syscall0(type,name) \  /*生成无参函数*/
type name(void) { long __res; __asm__ volatile ("int $0x80" 	: "=a" (__res) 	: "0" (__NR_##name)); if (__res >= 0) 	return (type) __res; errno = -__res; return -1; }

#define _syscall1(type,name,atype,a) \ /*生成带有一个参数的函数*/
type name(atype a) { long __res; __asm__ volatile ("int $0x80" 	: "=a" (__res) 	: "0" (__NR_##name),"b" ((long)(a))); if (__res >= 0) 	return (type) __res; errno = -__res; return -1; }

本例子的代码来源于<unistd.h>,(unistd.h代表了unix standard,就是UNIX 标准文件。),本文的例子Linux0.11源码中。

这段代码很简单,但是很巧妙地使用了define,读者自行体会一下这个用法。然后自己动手。

下面是另一个:

#define LIST_ENTRY(type)  struct {struct type *le_next;/* next element */ struct type **le_prev;/* address of previous next element */	}
这是一段生成自定义双向链表结构的写法,很巧妙啊!!来源于<queue.h> 系统内核数据队列的头文件。本文采用的是freeBSD4.4版本的代码。

当然很多人会不禁说:为什么不用模板啊?

答:模板属于C++的东西 ,从编译的角度来讲,C编译的东西执行更接近汇编语言,对于一个操作系统来说,运行速度就是一切!当然有人会说这样写不容易做大型开发,我只想说一句话“你都知道的事情,Linux内核设计者不知道吗?”,设计者们之所以这样写,肯定是有自己的考虑的。至于为什么,本人猜测就是设计者们自己用严禁的态度防止出错,同时提高效率。

文章标题:Linux源码笔记——感觉写的巧妙的代码
文章地址:http://www.cjjjs.com/article/201594175056910
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:Linux源码笔记——感觉写的巧妙的代码
收藏 0 点赞 1

相关阅读

  1. linux 常见命令及说明杂记 查找全网同类文章
  2. VS调试Linux时遇到加载符号模块的问题 查找全网同类文章
  3. VS2017的Linux项目编译和链接的相关说明 查找全网同类文章
  4. linux分析磁盘目录的使用情况命令du 查找全网同类文章
  5. Linux系统内存不足守护者OOM Killer 查找全网同类文章
  6. linux中故障定位技术的学习 查找全网同类文章
  7. Linux中使用sftp服务在多个系统之间快速传送文件 查找全网同类文章
  8. Linux编程:14 一分钟全面讲解Linux编程开发完整流程入门 查找全网同类文章
  9. Linux编程:13 计算两个时间字符串的时间差 查找全网同类文章
  10. 编程新书推荐:Linux命令速查手册(第2版)-Linux命令学习快速入门书籍 查找全网同类文章
分享到:
分享文章[Linux源码笔记——感觉写的巧妙的代码]到QQ空间

相关阅读

猜您感兴趣