原文:anatomy-of-a-program-in-memory
【译】进程内存布局剖析linux中文件描述符fd和文件指针filp的理解
原文:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html
简单归纳:fd
只是一个整数,在open
时产生,起到一个索引的作用;进程通过PCB
中的文件描述符表找到该fd
所指向的文件指针filp
。
文件描述符的操作(如:open
)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用;而流(如:fopen
)返回的是一个FILE
结构指针, FILE
结构是包含有文件描述符的,FILE
结构函数可以看作是对fd
直接操作的系统调用的封装, 它的优点是带有I/O缓存。
从文件 I/O 看 Linux 的虚拟文件系统
原文出处:http://www.ibm.com/developerworks/cn/linux/l-cn-vfs/
简介: Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统交换器,即VFS(Virtual Filesystem Switch)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。本文在简要介绍 VFS 的相关数据结构后,以文件 I/O 为切入点深入 Linux 内核源代码,追踪了 sys_open 和 sys_read 两个系统调用的代码结构,并在追踪的过程中理清了跨文件系统的文件操作的基本原理和“一切皆是文件”的口号得以实现的根本。
platform_get_resource 函数实现细节
参考原文:http://bbs.ednchina.com/BLOG_ARTICLE_3008325.HTM
platform_get_resource
函数源码如下:
1)新内核实现
2)旧内核实现:
Linux Platform Device and Driver
原文:http://blog.csdn.net/yili_xie/article/details/5187014
从 Linux 2.6 起引入了一套新的驱动管理和注册机制: platform_device
和 platform_driver
。
Linux 中大部分的设备驱动,都可以使用这套机制 , 设备用 platform_device
表示,驱动用 platform_driver
进行注册。
Linux platform driver 机制和传统的 device driver 机制 ( 通过 driver_register
函数进行注册 ) 相比,一个十分明显的优势在于 platform 机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过 platform device 提供的标准接口进行申请并使用。这样提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性 ( 这些标准接口是安全的 ) 。
Platform 机制的本身使用并不复杂,由两部分组成: platform_device
和 platform_driver
。
通过 Platform 机制开发发底层驱动的大致流程为:
1)定义 platform_device
2)注册 platform_device
3)定义 platform_driver
4)注册 platform_driver
羊皮卷的故事(《世界上最伟大的推销员》节选)
开始新的生活
成功是一种精神状态。人们对于成功的定义,见仁见智,而失败却往往只有一种解释:失败就是一个人没能达到他的人生目标,不论这些目标是什么。事实上,成功与失败的最大分别,来自不同的习惯。好习惯是开启成功的钥匙,坏习惯则是一扇向失败敞开的门。
只有一种习惯才能抑制另一种习惯。经过多次重复,一种看似复杂的行为就变得轻而易举,实行起来,就会有无限的乐趣,有了乐趣,出于人之天性,人们就更乐意常去实行。于是,一种好的习惯便诞生了,习惯成为自然。既是一种好的习惯,也就是我们的意愿。
经验确实能教给我们很多东西,只是这需要花费太长的时间。等到人们获得智慧的时候,其价值已随着时间的消逝而减少了。结果往往是这样,经验丰富了,人也余生无多。经验和时尚有关,适合某一时代的行为,并不意味着在今天仍然行得通。
爬出满是失败创伤的老茧,开始新的生活。
用全身心的爱来迎接今天
强力能够劈开一块盾牌,甚至毁灭生命,但是只有爱才具有无与伦比的力量。爱,使得挫折变得如春雨般温和;爱是打开人们心靡的钥匙,也是抵挡仇恨之箭与愤怒之矛的盾牌。
爱每个人的言谈举止,因为人人都有值得钦佩的性格,虽然有时不易察觉。用爱摧毁困住人们心灵的那充满怀疑与仇恨的围墙,用爱铺一座通向人们心灵的桥梁。
用 全身心的爱来迎接今天,最主要的,要爱自己。只有这样,才会认真检查进入自己身体,思想,精神,头脑,灵魂,心怀的一切东西。绝不能放纵肉体的需求,要用 清洁与节制来珍惜自己的身体;绝不让头脑受到邪恶与绝望的引诱,要用智慧和知识使之升华;绝不让灵魂陷入自满的状态,要用沉思和祈祷来滋润它;绝不让心怀 狭窄,要与人分享,使它成长,温暖整个世界。
爱所有的人,仇恨将从我们的血管中流走。没有时间去恨,只有时间去爱。
坚持不懈,直到成功
在古老的东方,挑选小公牛到竞技场格斗有一定的程序。它们被带进场地,向手待长矛的斗牛士攻击,裁判以它受戳后再向斗牛士进攻的次数多寡来评定这只公牛的勇敢程度。我们的生命每天都在接受类似的考验。只有坚韧不拔,勇往直前,迎接挑战,才会取得成功。
生 命的奖赏远在旅途终点,而非起点附近。每天的奋斗就像对参天大树的一次砍击,头几刀可能了无痕迹,每一击看似微不足道,然而,累积起来,巨树终会倒下。就 像冲洗高山的雨滴,吞噬猛虎的蚂蚁,照亮大地的星辰,建起金字塔的奴隶,我们也要一砖一瓦地建造起自己的城堡。只要持之以恒终会水滴石穿,到达成功彼岸。
自然界最伟大的奇迹
世界上没有相同的两片叶子,我们的头脑、心灵、眼睛、耳朵、双手、头发、嘴唇都是与众不同的。言谈举止完全一样的人以前没有,现在没有,以后也不会有。虽然四海之内皆兄弟,然而人人各异。我们皆为独一无二的造化。
不再为昨日的成绩沾沾自喜,自吹自擂。我们能做的比已经完成的更好。我们的出生并非最后一样奇迹,为什么自己不能再创奇迹呢
飞禽走兽、花草树木、风雨山石、河流湖泊,都没有像我们一样的起源,我们孕育在爱中,肩负使命而生。自然界不知何谓失败,终以胜利者的姿态出现,我们也要如此。
假如今天是生命中的最后一天
如何利用这最后、最宝贵的一天呢?不再为昨日的不幸而叹息,过去的已够不幸,不要再赔上今日的运道。也不再痴想明天,明天是一个未知数,为什么要把今天的精力浪费在未知的事上?想着明天的种种,今天的时光也白白流逝了。
假如今天是生命中的最后一天。这是仅有的一天,是现实的永恒。生命只有一次,而人生也不过是时间的累积。若让今天的时光白白流逝,就等于毁掉人生最后一页。因此,要珍惜今天的一分一秒,因为它们将一去不复返。我们无法把今天存入银行,明天再来取用。时间像风一样不可捕捉。每一分一秒,得用双手捧住,用爱心抚摸,因为它们如此宝贵。垂死的人用毕生的钱财都无法换得一口生气。我们无法计算时间的价值,它们是无价之宝!
学会控制情绪
潮起潮落,冬去春来,夏末秋至,日出日落,月圆月缺,雁来雁往,花飞花谢,草长瓜熟,自然界万物都在循环往复的变化中,人的情绪也会时好时坏。
我们心中像有一只轮子不停地转着,由乐而悲,由悲而喜,由喜而忧。这就好比花儿的变化,今天绽放的喜悦也会变成凋谢时的绝望。但要记住,正如今天枯败的花儿蕴藏着明天新生的种子,今天的悲伤也预示着明天的欢乐。
花草树木,随着气候的变化而生长,但是我们可以为自己创造天气,用自己的心灵弥补气候的不足。“弱者任思绪控制行为,强者让行为控制思绪”,我们要学会这个千古秘诀。宽容怒气冲冲的人,忍受他的指责与辱骂,因为他尚未懂得控制自己的情绪,也许明天他就会改变,重新变得随和。
当你领悟了人类情绪变化的奥秘,对于自己千变万化的情绪,就不再听之任之,只有积极主动地控制情绪,才能掌握自己的命运。
笑遍世界
笑自己,因为自视甚高的人往往显得滑稽,千万不能跌进这个精神陷阱。虽说自己是造物主最伟大的奇迹,自己不也是沧海一栗吗?我们真的知道自己是从哪里来,要到哪里去吗?现在所关心的事情,十年后看来,不会显得愚蠢吗?
世 上种种到头来都会成为过去。心力衰竭时,要安慰自己,这一切都会过去;因成功而洋洋得意时,要提醒自己,这一切都会过去;穷困潦倒时,要告诉自己,这一切 都会过去;腰缠万贯时,也要告诉自己,这一切都会过去。是的,昔日修筑金宇塔的人早已作古,埋在冰冷的石头下面,而金宇塔有朝一日,也会埋在沙土下面。如 果世上种种终必成空,那又为何要对今天的得失斤斤计较?
用笑声点缀今天,用歌声照亮黑夜。不再苦苦寻觅快乐,要在繁忙的工作中忘记悲伤。享受今天的快乐,因为它不像粮食一样可以贮藏,更不似美酒越陈越香。
笑声中,一切都显露本色。笑自己的失败,它们将化为梦的云彩;笑自己的成功,它们回复本来面目;笑邪恶,它们将远我而去;笑善良,它们将发扬光大。
加倍重视自己的价值
桑叶在天才的手中变成了丝绸,粘土在天才的手中变成了堡垒,柏树在天才的手中变成了殿堂,羊毛在天才的手中变成了袈裟。如果桑叶、粘土、柏树、羊毛经过人的创造,可以成百上千倍地提高自身的价值,那么我们为什么不能使自己身价百倍呢?
我们的命运如同一颗麦粒,有着三种不同的道路。一颗麦粒可能被装进麻袋,堆在货架上,等着喂猪;也可能被磨成面粉,做成面包;还可能撤在土壤里,让它生长,直到金黄色的麦穗上结出成千上百颗麦粒。我们和一颗麦粒唯一的不同在于麦粒无法选择是变得腐烂还是做成面包,或是种植生长,而我们有选择的自由。不要让生命腐烂,也不要让它在失败,绝望的岩石下被磨碎,任人摆布。
要 想让麦粒生长、结实,必须把它种植在黑暗的泥土中,失败、失望、无知、无能便是那黑暗的泥土,深深地扎根于泥土中,等待成熟。麦粒在阳光雨露的哺育下,终 将发芽、开花、结实。同样,我们也要健全自己的身体和心灵,以实现自己的梦想。麦粒须等待大自然的契机方能成熟,我们却无须等待,因为我们有选择自己命运 的能力。
一颗麦粒增加数倍以后,可以变成数千株麦苗,再把这些麦苗增加数倍,如此数十次,它们可以供养世上所有的城市。难道我们不如一颗麦粒吗?
现在就付诸行动
一张地图,不论多么详尽,比例多精确,它永远不可能带着它的主人在地面上移动半步;一个国家的法律,不论多么公正,永远不可能防止罪恶的发生。我们的幻想 毫无价值,我们的计划渺如尘埃,我们的目标不可能达到,一切的一切毫无意义——除非我们付诸行动。只有行动才能使地图、法律、梦想、计划、目标具有现实的 意义。
拖延就会使人裹足不前,它来自恐惧。要想克服恐惧,就必须毫不犹豫,起而行动,唯其如此,心中的慌乱方得以平定。行动会使猛狮般的恐惧,减缓为蚂蚁般的平静。要记住萤火虫的启迪:只有在振翅的时候,才能发出光芒。
现在是我们的所有,明日是为懒汉保留的工作日。现在就付诸行动。
sed 函数参数
|
|
如果没有 -e, –expression, -f 或 –file 选项,那么第一个非选项参数被视为sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准输入读取数据。
注:-n 参数和 -i 参数不要一起使用。
本章将以一节一个函数参数的方式 ,介绍所有 sed 提供的函数参数 , 其中有
|s|d|a|i|c|p|l|r|w|y|!|n|q|=|#|N|D|P|h|H|g|G|x|b|t|
另外 , 在各节中 , 首先简单介绍函数参数功能 , 接着说明函数参数与位址参数配合的格式 ,而其中也一并描述 sed 执行此函数参数的工作情形。
sed 学习手册
sed 简要介绍
Sed(Stream EDitor)为 UNIX 系统上提供将编辑工作自动化的编辑器 , 使用者无需直接编辑资料。使用者可利用 sed 所提供 20 多种不同的函数[参数] , 组合它们完成不同的编辑动作。此外 ,由於 sed 都以行为单位编辑文件 , 故其亦是行编辑器(line editor)。
一般 sed 最常用在编辑那些需要不断重覆某些编辑动作的文件上, 例如将文件中的某个字串替换成另一个字串等等。这些相较於一般 UNIX 编辑器(交互式的, 如 vi、emacs)用手动的方式修改文件, sed 用起来较省力。
sed 是一个非交互式上下文(context)编辑器,它被设计在下列三种情况下发挥作用:
- 编辑那些对舒适的交互式编辑而言太大的文件。
- 在编辑命令太复杂而难于在交互模式下键入的时候,编辑任何大小的文件。
- 要在对输入的一趟扫描中有效的进行多个”全局”(global)编辑函数。
因为每次只把输入的某些行驻留在内存中, 并且不使用临时文件,所以可编辑的文件的有效大小,只受限于输入和输出要同时共存于次级存储的要求。可以单独的建立复杂的编辑脚本并作为给 sed 的命令文件。对于复杂的编辑,这节省了可观的键入和随之而来的错误。从命令文件运行 sed 高效于作者所知道的任何交互式编辑器,甚至包括能用预先写好的脚本驱动的编辑器。
相较于交互式编辑器而言,根本性的损失是缺乏相对地址(由于操作是每次一行的),和缺乏对命令如期运行的立即验证。
sed & awk 概述
摘自《sed与awk》 Dale Dougberty&Arnold Robbins 著
如果你正要开始学习 sed 与 awk,最好从了解它们的共同点入手:
- 它们都使用相似的语法来调用。
- 它们都是面向字符流的,都是从文本文件中一次一行的读取输入,并将输出直接送到标准输出端。
- 它们都使用正则表达式进行模式匹配。
- 它们允许用户在脚本中指定指令。
它们有如此多的共同点,原因之一是它们都起源于相同的行编辑器—— ed。下面首先对 ed 做简短介绍,再介绍 sed 和 awk 是如何一步步形成可编程的编辑器的。sed 和 awk 的区别在于它们控制所做的工作时所用的指令不同。这是一个主要的区别,而且这影响了这些程序最适于处理的任务类型。