linux系统编程_中文版.pdf
linux系统编程:文件IO]、缓冲区输入输出、高级文件IO、进程管理等第0章译者序译者序Linux System Programming》(简称LSP)的中文翻译工作是浮图开放实验室和哈尔滨工业大学计算机学院IBM俱乐部《深入理解计算机系统》讨论班的练习项∏。参与翻译工作的同学包括从本科二年级到研究生二年级的十位同学。他们是林晓鑫、王澍、崔玉春、吉飞飞、何春晓、熊飞、李志、张祖羽、张智、陈盛、张永辉。附录的翻译由Sms@LilacbBs.com完成,参考文献韶分的翻译由王澍完成。刘文懋、王耀、刘德超、于墨、王新喜等同学参与了审校工作。全书的初稿审校由吴晋完成。本书基于哈尔滨工业人学硕士博士论文TX模板制作,全书的模板修正工作由李志完成。本书的翻译工作基于LSP第版完成,并根据英文版勘误进行了修正。在本书内部审核版本发布后得到了原IBM俱乐部成员谢煜波(现供职于微软亚洲工程院)和戴晓光(现供职于SUN中国有限公司)的大力支持,他们利用宝贵的业余时间对部分章节进行了仔细的审校,并提出了大量细致的修改意见。他们的修改总见使所有参与翻译的同学受益良多。在此向他们表示感谢。在翻译过程中还得到了紫丁香社区和 Harbin Linux User group网友的大力支持,在此向他们一并表示感谢。由于译者在系统编程方面并没有丰富的经验,整个翻译工作以学习为日的,因此书中的错误和疏漏在所难免。如果书中存在任何问题,请用如下方式和我们联系Websitehttp://www.footoo.orgTwitterhttp://twittcr.com/cliffwooEmai: cliffwoo(agnail. com或者 cliffwood(a, footoo orgGoogleGroups:http://groups.googlecom/group/lspcn/吴晋于哈尔滨工业大学9年4月30日第0章版权声明版权声明《 Linux System Programming》中文版的翻译工作为哈尔滨工业人学计算机学院IBM俱乐部的练习项∏。译文仅供系统编程的学习和交流使用,严禁用于商业用途。《 Linux System Programming》的版权归作者及原出版社所有,译文仅供系统编程的学习和交流使用。未经原书作者及出版社允许的出版、发行、制作所引发的纠纷,由当事人负责,特此声明目录目录译者序版权声明第1章简介和主要概念1.1系统编程..1.1.1系统调用1.1.2调用系统调用1.1.3C厍1.1.4C编详器翻12API和ABI.···:.:···.···········334441.2.1API1.2.2ABl1.3标准1.3.1POSX和SUS的历史.1.3,2C语言标准.133 linux和标准,1.34本书和标准1.4 Linux编程概念1.4.1文件和文件系统1.4.2普通文件14.3日录和链接1.44硬链接...14.5符号链接·:··········9012214.6特殊文件1.4.7文件系统和名字空间131.4.8让程.1449线程1.4.10进程体系1.4.11用户和组D4·鲁垂1.4.12权限.1.4.13信号.667881.4.14进程间通讯..1.4.15头文件∴1914.16错误处理195开始系统编程.22目录第2章文件IO232.1打开文件242.1. open系统调用看垂,242.1.2新文件所有者2621.3新文件权限214 creatO函数·.···:2.1.5返回值和错误码022用read读取文件292,2.1返回值30222读入所有的字节..31223非阻塞读322.2.4其他错误码,322.5 reado大小限制23用 write来写3423.1部分写.352.32追加模式.362.33非阻塞写2.3.4其他错误码,3623.5 write人小限制236 write的行为∴,,3724同步IO着2.4.1 fsynco Xh fdatasynco242返回值和错误码.394.3 synco..…40244 O SYNO标志.41245 O DSYNC和 O RSYNO.412.5直接T/O...422.6关闭文件.26.1错误码4327用 Seeks查找442.7.1文件末尾之后进行查找2.72错误码462.7.3限制4628定位读写462.8.1错误码472.9截短文件472.10I(O多路复用鲁看492.10.1 selectO502.10.2返回值和错误码2.10.3pol572104polO与 sclect6VI目录2.内核内幕.2.1.1虚拟文件系统622.1.2页缓存.632.1.3页回写2.12结论∴65第3章缓冲输入输出663.1用户一缓冲IO..663.1.1块人小···673.1.2标准IO∴,683.1.3文件指针683.2打开文件693.2.1模式..693.2.2通过文件描述符打开文件3.3关闭流713.3.1关闭所有的流7134从流中读取数据.7134.1单字节读取71342把字符回放入流中..72343按行的读取.344读取任意字符串7334.5读取二进制文件743.5向流中写数据3.5.1对齐的讨论753.52写入单个字符,763.5.3写入字符串..763.54写入二进制数据.773.55缓冲IO示例程序773.6定位流793.6.1获得当前流位置803.7清洗一个流8138错误和文件结束3.9获得关联的文件描述符∴·鲁垂·垂833.10控制缓冲833.,1l线程安仝853.1.1手动文件加锁.853.11.2不加锁流操作863.12对标准IO的批评873.13结论,,,,,88ⅤII目录第4章高级文件IO894.1散布/聚集IO894.11 ready和 writen···.······.904.2 Event poll接口.9642.1创建一个新的epol'实例42.,2控制 epoll9742.3等待 Epoll事件994.2.4边沿触发事件和水平触发事件..10l43存储映射.1014.3.1 mmap.1024.3.2 munmap(........·着垂1064.33存储映射例子..10643.4 mmap的优点l0843.5mmap(的缺陷43.6调整映射的大小.10943.7改变映射区域的权限11043.8使用映射机制同步文件∴114.39映射提示44普通文件IO提示1144.4.1 posix- fadviseo114442 readahead系统调用11644.3“绎济实用“的操作提..11645同步( Synchronized),同步( Synchronous)及异步( Asynchronous)操作..11745.1异步lO4.6IO调度器和IO性能1204.6.1磁盘寻址120462调度器的功能121463改进读请求∴,1224.6.4选择和配置你的IO调度器12546.5优化IO性能2547结论132第5章进程管理.·着垂,,,,,13351进程ID∴,13351.1分配进程ID1345.1.2进程体系134p5.1.4获得进程ID和父进程的ⅠD..13552运行新进程13652.1exec系列系统调用136522 forko系统调用139ⅤI一目录5.3终止进程14353.1其他终止进程的方式1445.3.2 atexit,1455.3.3 on_exit()1465.3 4 SIGCHLD14654等待终止的了进程..14754.1等待特定进程15054.2其他等待了进程的方法15543BSD中的wat30和wait4(153544创建并等待一个新进程54.5僵死进程15855用户和组.:··:·5.51实际用户(川D、有效用户(纠D和保存设置的用户(纠)D.1595.5,2改变实际用户(组)D和保存设置的用户(组)ⅠD….1605.53改变有效用户和组ID.161554BSD改变用户ID和组ID的方式161555HPUX中改变用户ID和组ID的方式,1625.56操作用户ID组ID的首选方法55.7对保存设置的用户ID的支持,,1635.58获取用户ID和组ID1635.6会话和进程组.16456.1与会话相关的系统调用16556.2与进程组相关的系统调用167563废的进程组函数.,1685.7守护进程.,1695.8总结.171第6章高级进程管理1726.1进程调度.垂着,,1726.1.1大O记法6.1.2时间片1736.1.3IO约束进程Ⅴs.处理器约束进程1746.1.4抢占调度·着垂垂音,,,,,1756.1.5线程..17562让出处理器7662.1合理使用176622让出处理器方法的过去和现状17763进程优先级6.3.1nice(..1796.3.2 getpriorityO FA setpriorityO180633IO优先级181IX目录6.4处理器亲和度,6.4.1 sched-gctaffinityO H sched -setaffinityO.18365实时系统,1856.5.1软硬实时系统186652延吋,抖动和截止期限∴.,1866.53 Linux的实时支持1876.54 Linux调度策略和优先级.1886.55设置调度参数..1926.5.6 sched rr-get_intervalO6.57于实时进程的一些提醒1976.5.8确定性.19766资源限制.20066.1限制列表20166.2获取和设置资源限制.204第7章文件与目录管理2077.1文件及其元数据..20771.1组stat函数..2077.1.2权限.211713所有权,2137.14扩展属性.21572目录.,22372.1当前工作目录2247.2.2创建目录.22972.3移除目录,,23072.4读取目录内容23173链接.2357.3.1硬链接.....236732符号链接2377.3.3解除链接23974复制和移动文件,.7.4.1复制240742移动鲁鲁垂∴,24l75设备节点.2427.5.1特殊设备节点2437.52随机数生成器..2437.6带外通信24477监视文件事件2467.7.1初始化 inotify,,,247772监视247