内核负责维护进程表。每个进程在其中都有记录。每个进程表中有个打开的文件描述
符表。它记录了该文件描述符的标志和文件表指针。文件表中存放了该文件的当前
偏移量。文件状态标志,引用计数,v节点指针(linux中用的是与文件系统无关的i节点)。
当文件表中的引用计数为零时,该文件就会被关闭。
我们知道dup用来复制一个描述符,反回的新描述符和旧描述符共享一个文件表,同时文件表中的引用计数加1。
close的作用是关闭一个文件描述符。使该描述符不在与某个文件有关联。并且之前与之有关的文件的文件表中的引用计数会减1,
如果减1后引用计数为0,那么就关闭该文件。
所以当我们使用dup后再调用close关闭原来的文件描述符。那么依然可以用产生的新文件描述符来访问文件
当以o_append标志调用open函数时(当前文件偏移量被置为文件尾),如果之后再
调用lseek函数定义当前文件偏移量。那么lseek可以定位到任何位置读。但是不可
以定位到任何位置写。即使,lseek将文件当前偏移定位到别的地方,然后写。因为
定义了o_append标志,所以每次写时又会重新定位到文件尾,然后才写。
阅读(1415) | 评论(0) | 转发(0) |