《UNIX环境高级编程》笔记--文件共享
来源:互联网 发布:js 获取contextpath 编辑:程序博客网 时间:2024/04/29 23:19
1.文件共享
内核使用3种数据结构来表示打开的文件,他们的关系如下:
每个进程都有一张进程表项,记录进程打开的文件:
fd标志:close_on_exec,若一个文件描述符在close_on_exec中的对应比特位被设置,那么在执行execl函数时该描述符将被关闭,
即在execl函数执行的程序中直接使用该描述符,则会出错(但是如果是子进程,则仍然可以使用该FD,不管close_on_exec设置
成什么);否则该描述符将始终处于打开状态,即在在execl函数执行的程序中可以直接使用该描述符。
文件指针:指向文件表。
文件表:
文件状态标志:read,write,append,sync等,即open的flag参数。
当前文件偏移量:当执行了write后,当前文件偏移量就增加了相应的长度,如果偏移量超过了文件的长度,则将i节点表中的当前
文件长度设置为文件偏移量。当使用O_APPEND打开文件后,首先将文件偏移量设置为i节点表中的当前文件长度。
v节点指针:指向v节点表。
v节点表:
v节点包含了文件类型和对此文件进行各种操作的函数指针。
v节点还包含了该文件的i节点(i-node)。
(linux没有使用v节点,只使用了通用i节点结构,这2种实现上有所不同,但是概念上是一样的)
上图表示一个进程打开了2个不同的文件,一个是标准输入,一个是标准输出。
下图表示2个不同的进程打开同一个文件。
2.dup和dup2函数
这2个函数是用来复制一个现存的文件描述符,函数的定义如下:
#include <unistd.h>int dup(int filedes); //复制filedes,并返回新的filedes(该文件描述符是当前可用文件描述符中最小值),如出错,返回-1int dup2(int filedes, int filedes2); //使用filedes2复制filedes,如果filedes2已经打开,则先关闭它;如果filedes等于filedes2,则返回filedes2,而不关闭它。
下图显示了执行如下语句的结果:(假设当前可用文件描述符的最小值是3)
newfd = dup(1);
复制一个文件描述符的另一种方法是使用fcntl函数,这个函数会在以后进行介绍。
- 《UNIX环境高级编程》笔记--文件共享
- 《UNIX环境高级编程》笔记--文件共享
- 《UNIX环境高级编程》笔记5--文件共享
- unix环境高级编程-3.10-文件共享
- UNIX环境高级编程--文件共享
- 《UNIX环境高级编程》笔记--文件时间
- UNIX环境高级编程学习笔记(三)文件共享和其他文件I/O函数
- 文件共享(摘自unix环境高级编程)
- 进程、线程、文件共享--操作系统概念--unix环境高级编程
- <UNIX环境高级编程>文件共享及fork函数
- <UNIX环境高级编程>文件共享及fork函数
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- Unix环境高级编程 笔记
- Unix环境高级编程笔记
- Unix环境高级编程学习笔记(二) 文件IO
- 《UNIX环境高级编程》笔记--文件长度和文件截短
- [catch]--A Mathematical Curiosity
- poj 1102 LC-Display
- HDU 4716 A Computer Graphics Problem 解题报告
- 【Cocos2d-html5游戏引擎学习笔记(1)】游戏引擎初探究和搭建开发环境
- 黑马程序员-集合框架总结
- 《UNIX环境高级编程》笔记--文件共享
- 华为2014校园招聘机试题(一)
- BOLTZMAN神经网络C程序
- 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue使用场景总结
- mysql常用语法
- 第2章(对象和类型)
- HDU 4727 The Number Off of FFF 解题报告
- Oracle SQL tuning 步骤
- 程序实现LayoutAnimationController