文件描述符:所有打开的文件通过文件描述符引用,文件描述符是一个非负整数。当打开或创建一个新文件时,当前可用最小,内核向进程返回文件描述符。
1.open函数
int open(const char * 文件名,int oflag, (创建时使用第三个参数))
返回值:成功返回文件描述符,出错返回-1.
打开方式:
OFLAG:
1.O_RDONLY 只读
2.O_WRONLY 只写
3.O_RDWR 读写
上述常量三选一:
下列可选择的:
O_APPEND 每次写时追加到文件尾端。
O_TRUNC 如果文件存在将其截短为0。
O_CREAT 创建文件,使用此时,指定文件权限位。 文件权限位 & umask屏蔽字
2.lseek:每个打开打开的文件偏移量都与其关联的“当前文件偏移量”。通常是一个非负整数。
off_t lseek(int fileds, off_t offset, int whence )//文件标识符,偏移量, 以哪一种方式
返回值:成功返回新的文件偏移量,若出错返回-1.
int whence:
SEEK_SET 距离文件偏移量多少
SEEK_CUR 从当前位置加多少偏移量,可正可负。
SEEK_END 从文件长度增加偏移量 , 可正可负。
3.read函数:
SSIZE_T (int filedes, void *buf, size_t nbytes) //标识符,缓冲区(可以是堆或栈),读多大字节
返回值:若成功返回读到的字节,读到末尾返回0,失败返回-1.
4.write函数:
SSIZE_T (int filedes,void *buf,size_t nbytes)//标识符, 缓冲区, 写多少字节。
返回值:成功返回已写的字节数,失败返回-1.
5.close函数:
close(fd);
i/o效率:
1024 - 4096 比较好,4096为最佳。
文件共享:
进程表项:1024个字节,类似于结构体,里面有标记flag,还有指向文件表的指针。(给用户返回的是文件描述符)
文件表项:每打开一个文件就有1个文件表项和对应的V结点表项。(同一个文件打开多次有多个文件表),以打开次数为单位。
结构体成员:
1.文件打开方式(way)
2.偏移量(position)(从那里读,从那里写)
3.指针指向v结点表项
V节点表项:文件的信息。(长度,权限。。。)(V结点打开同意个文件,)
原子操作: