不带缓存 指的是每个read和write都调用内核中的一个系统调用。
文件描述符
1. 对于内核而言 ,所有打开文件都是由文件描述符应用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时,内核向进程返回一个文件描述符。。
2. UNIX shell使用文件描述符0与进程的标准输入相结合;文件描述符1与进程的标准输出相结合,文件描述符2与标准出错相结合。
3. 在POSIX.1中,在头文件<unistd.h> 中, 0 ----STDIN_FILENO,1 -----STDOUT_FILENO ,2 -----STDERR_FILENO.
open函数
1. 功能:打开或创建一个文件;
2. 在<fcntl.h>中定义: O_RDONLY 只读打开;O_WRONLY 只写打开 ; O_RDWR 读、写打开。
3. O_APPEND 每次都写到文件的尾端;O_CREAT 若此文件不存在则创建他; O_EXCL 如果同时指定了O_CREAT,则出错;O_TRUNC 清空;O_NONBLOCK 设置后续的IO操作为非阻塞;O_SYNC 每次IO操作都等到物理I/O操作完成。
4. 由open返回的文件描述符一定是最小的未用的操作符数字。
5. 文件名 NAME_MAX是14,当文件名的长度超过14的时候,由_POSIX_NO_TRUNC来决定是截取文件名或返回出出错,其值为真,返回初出错。
creat函数
1. 功能:创建一个新文件。
2. 相当于等效的:open(pathname,O_WRONLY|O_CREAT|O_TRUNC,mode);
close 函数
1. 功能:关闭一个文件
2. 关闭一个文件时也释放该进程在该文件上的所有记录锁。
lseek函数
1. off_t lseek(int fileds,off_t offset,int whence);
2. 判断lseek的值是否为-1,来确定文件的偏移是否正确
3. whence是SEEK_SET:该文件的位移量设置为距文件开始处offset个字节;
4. whence是SEEK_CUR:相对于当前位置的偏移量;
5. whence是SEEK_END:相对文件尾端的位移量。
read函数
1. 功能:从打开文件中读取数据
2. ssize_t read(in fileds,void buff,size_t nbytes);
3. read成功,则返回读到的字节数,如果已经到达文件的尾端,则返回0;
4. ### write函数
功能:向文件写数据
1. ssize_t write(int fielses,const void buff,size_t nbytes);
2. write出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制。
3. 通常是O_APPEND的选项,每次写操作之前,将文件位移量设置在文件的当前结尾处。
文件共享
文件描述符标志:只用于一个进程的一个描述符
文件状态标志:适用于指向该给定文件表项的任何进程中的所有描述符。
原子操作
1. 添加至一个文件
2. 任何一个要求多于1个函数调用的操作都不能成为原子操作,因为在两个函数调用之间,内核可能会临时挂起该进程。
3. 原子操作指的是由多步组成的操作,如果该操作原子地执行,则或者执行完所有步,或者一步也不执行,不可能只执行所有步的一个子集。
dup和dup2函数
1. int dup(int filedes)
2. int dup2(int filedes,int filedes2)
3. 由dup返回的新文件描述符一定是当前可用文件描述符中最小的数值。