1.open和openat函数
当path参数指定的是相对路径名,fd参数指出了相对路径名在文件系统中的开始地址,可以理解为文件描述符
前五个常数不能重复,只能选其一。
2.creat函数
以只写方式打开所创建的文件,如果文件名存在则覆盖原内容,若不存在则创建一个。
3.close函数
4.lseek函数
lseek与文件偏移量有关,简而言之就是指向的当前读写的位置,如果不设置的话,write和read每次操作文件,偏移量都会重置为0
5.read函数
第一个参数是文件描述符,第二个参数是要读取的内存地址,第三个参数是一次读的长度
6.write函数
int main(void) {
int n; char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
if (write(STDOUT_FILENO, buf, n) != n)
err_sys("write error");
if (n < 0)
err_sys("read error");
exit(0);
}
比如read是从标准输入读到buf里边,然后write是从buf写到标准输出中。
7.内存共享
两个独立进程各自打开同一个文件的话,各自会拥有一份文件的表项。
8.原子操作
个人理解就是将多个操作合在一起变为一个操作处理,特别是处理两个进程要并发地处理同一个文件时。
(1)追加到一个文件
假设有两个进程都要对一个文件进行追写操作,那么同时执行的时候会出现问题,这种时候是将这两个操作对于其他进程而言称为一个原子操作。
解决方法是在打开文件的时候设置O_APPEND标志位,这样可以在每一次写的时候都偏移到文件尾端
(2)pread pwrite
(3)创建一个文件
3.12dup和dup2函数
返回当前可用的最小文件描述符,该文件描述符和fd指向同一个文件,即它们共享同一文件状态标志和文件偏移量
3.13sync fsync和fdatasync函数
这个和linux的sync命令有相同的效果,就是强制将缓冲区的内容读入硬盘中,特别是在突然断电的情况下,或者要重用缓冲区时。
3.14fcntl函数
3.15 ioctl函数
io的万用函数,除了支持文件IO,还支持磁带IO、终端IO。