网站大量收购独家精品文档,联系QQ:2885784924

LINUX环境编程系统培训讲义.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX环境编程系统培训讲义

LINUX环境编程系统培训;目录;文件IO与标准IO的区别 文件共享 原子操作 文件记录锁 IO的效率 进程打开的文件描述字个数 几个常用的函数;大多数U N I X文件I / O只需用到5个函数:o p e n、r e a d、w r i t e、lseek 以及c l o s e。然后说明不同缓存器长度对re a d和w r i t e函数的影响。 上面这些函数经常被称之为不带缓存的I / O(u n b u ffered I/O,不带缓存----指的是每个r e a d和w r i t e都调用内核中的一个系统调用。 这些不带缓存的I / O函数不是ANSI C的组成部分,但是是P O S I X . 1和X P G 3的组成部分。 标准I / O提供缓存,目其的是尽可能减少使用r e a d和w r i t e调用的数量,它也对每个I / O流自动地进行缓存管理,避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I / O库令人最感迷惑的也是它的缓存。标准I/O有三种缓存类型:全缓存,行缓存,不缓存。 (1)我们可以通过buffersize.c程序来测试缓存的大小。 (2)我们可以通过iofork.c程序来测试缓存给我们带来的困扰 (3)我们可以通过bufferio.c和fileio.c程序来测试文件I/O和标准I/O的区别;在例fileshare.c中,我们在两个进程中对同一个文件写入,会发现后一次的写入会覆盖前一次的写入,我们可以作这样的改进:在每次写入之前我们先定位到文件结尾,再写入: if (lseek(fd, 0L, SEEK_END) 0) /*position to EOF*/ printf(lseek error:%s\n“, strerror(errno)); if (write(fd, buff, 100) != 100) /*and write*/ printf(“write error:%s\n“, strerror(errno)); 这样看起来似乎没有问题,但是实际操作的时候却有可能在执行第一句时被中断,然后由另一进程执行,再切换回来的时候仍然会覆盖另一进程写入的结果。;上面的问题出在逻辑操作“定位档到文件尾端处,然后写”使用了两个分开的函数调用。 解决问题的方法是使这两个操作对于其他进程而言成为一个原子操作。任何一个要求多于1个函数调用的操作都不能成为原子操作,因为在两个函数调用之间,内核有可能会临时挂起该进程。 LI N U X 提供了一种方法使这种操作成为原子操作,其方法就是在打开文件时设置O_APPEND标志。另外,我们在创建文件的时候,如果先判断某个文件是否存在,若不存在,则创建它,如果在打开??创建之间,另一个进程创建了该文件,那么就会发生问题。如果在这两个函数调用之间,另一个进程创建了该文件,而且又向该文件写进了一些数据,那么执行这段程序中的c r e a t 时,刚写上去的数据就会被擦去,前面讲的open时使用O_EXCL便可解决这个问题。 一般而言,原子操作(atomic operation)指的是由多步组成的操作。如果该操作原子地执行,则或者执行完所有步,或者一步也不执行,不可能只执行所有步的一个子集。 ;当两个人同时编辑一个文件时,其后果将如何呢?在很多U N I X系统中,该文件的最后状态取决于写该文件的最后一个进程。但是对于有些应用程序,例如数据库,有时进程需要确保它正在单独写一个文件。我们引进记录锁的概念。 记录锁(record locking)的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区。 文件记录锁操作通过fcntl函数实现,当fcntl的cmd是F_GETLK、F_SETLK或F_SETLKW。第三个参数是一个指向flock结构的指针。 例子见lockfile.c;在有些情况下,我们从文件中读写数据时并不只能简单的实现访问文件的功能,而要考虑访问的速度,如视频存储录像,文件上传服务。 文件访问的速度与I/O的缓冲大小有关系,与访问的次数也有关系 ,也当然与存储的媒体介质类型有关系,如USB接口的移动硬盘与IDE接口的硬盘读写速度便不一样。我们可以通过代码进行测试在多大缓冲时写入的速度最快。;access : access函数实现按实际用户I D和实际组I D进行存取许可权测试的功能。 stat: stat函数返回一个与此命名文件有关的信息结构, fstat函数获得已在描述符 filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。 opendir:打开一个目录进行访问 readdir:读目录 lin

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档