文件IO
程序员文章站
2022-06-03 22:45:46
...
UNIX系统中大多数文件IO函数----------打开文件,读文件,写文件。
只需要用到基本5个函数:open,read,write,lseek以及close.主要是不同缓冲区长度对read和write函数的影响。
上面说明的函数经常被称为不带缓冲IO,不带缓冲指的是每个read和write都调用内核中的一个系统调用。
文件描述符0,与标准输入关联,1与标准输出关联。2与标准出错输出
打开或创建一个文件
#include <fcntl.h>
int open(const char *pathname,int flag,../* mode_t mode */);
调用create函数创建一个新文件
#include <fcntl.h>
int create(const char *pathname,mode_t mode);
等效于上面
open(pathname,O_WRONLY| O_CREAT | O_TRUNC,mode);
lseek
调用lseek显示地为一个文件设置其偏移量
#include <unistd.h>
off_t lseek(int fiedes,off_t offset,int whence);
调用read函数从打开文件中读取数据
#include <unistd.h>
ssize_t read(int fileds,void *buf,size_t nbytes);
write函数,向打开的文件写数据
#include <unistd.h>
ssize_t write(int filedes,const void *buf,size_t nbytes);
原子性的读和写
#include <unistd.h>
sszie_t pread(int f,void *buf,size_t nbytes,off_t offset);
sszie_t pwrite(int f,const void *buf,size_t nbytes,off_t offset);
dup 和 dup2
#include <unistd.h>
int dup(int f);
int dup(int f1,int f2);
dup返回当前f的同一描述符指向的文件表项,新文件描述符一定是当前可用文件描述符中最小的数值。
dup2 是一个原子操作。作用类似dup
为了保证传统的缓冲IO,快速的读写入到文件
#include<unistd.h>
int fsync(int f); //这个函数只对文件描述符指定的单一文件起作用,等待写磁盘操作结束再返回。可用于数据库等。
int fdatasync(int f); //类似fsync,但是只影响数据部分,而除数据外,fsync还会同步更新文件的属性。
void sync(void); //这个函数只是将所有修改过的块缓冲区加入写队列,然后返回,它不等待实际写磁盘操作结束。
fcntl函数可以改变已打开的文件的性质。
#include <fcntl.h>
int fcntl(int f,int cmd,.../*int arg*/);
这个函数有5个功能
1.复制现有的描述符
2.获得/设置文件描述符标记
3.获得/设置文件状态标志
4.获得/设置异步IO所有权
5.获得/设置记录锁
上一篇: 2级