Chinaunix首页 | 论坛 | 博客

fx

  • 博客访问: 1341565
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3964
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-02 14:36
文章分类
文章存档

2022年(2)

2019年(2)

2018年(10)

2017年(1)

2016年(50)

2015年(12)

2014年(9)

2013年(29)

分类: C/C++

2013-05-10 16:35:29

内核负责维护进程表。每个进程在其中都有记录。每个进程表中有个打开的文件描述
符表。它记录了该文件描述符的标志和文件表指针。文件表中存放了该文件的当前
偏移量。文件状态标志,引用计数,v节点指针(linux中用的是与文件系统无关的i节点)。
当文件表中的引用计数为零时,该文件就会被关闭。
我们知道dup用来复制一个描述符,反回的新描述符和旧描述符共享一个文件表,同时文件表中的引用计数加1。
close的作用是关闭一个文件描述符。使该描述符不在与某个文件有关联。并且之前与之有关的文件的文件表中的引用计数会减1,
如果减1后引用计数为0,那么就关闭该文件。
所以当我们使用dup后再调用close关闭原来的文件描述符。那么依然可以用产生的新文件描述符来访问文件




当以o_append标志调用open函数时(当前文件偏移量被置为文件尾),如果之后再
调用lseek函数定义当前文件偏移量。那么lseek可以定位到任何位置读。但是不可
以定位到任何位置写。即使,lseek将文件当前偏移定位到别的地方,然后写。因为
定义了o_append标志,所以每次写时又会重新定位到文件尾,然后才写。
阅读(1359) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~