基础IO
c语言文件IO相关操作:
fopen //打开文件,以只读形式
fread //从文件里读取一行
flcose //关闭文件
fseek //移动跳转到当前读写位置
.
.
. //等等
以上是c库函数访问文件的调用接口,在linux下可以采用系统调用接口
c 库中用于描述文件的是文件流指针,文件流指针中还定义了一个缓冲区,我们所说的刷新缓冲区是库函数独有的,这个缓冲区用于将短小数据组合成大数据一次,习惯性写入文件,提高效率
而系统调用写没有这个缓冲区。
在c库中:
标准输入————————–stdin
标准输出 ———————-stdout
标准错误输出 ——————stderr
在系统调用中:
标准输入————————–stdin (0)
标准输出 ———————-stdout (1)
标准错误输出 ——————stderr(2)
库函数与系统调用接口的关系:上下级调用关系:
操作说明
系统调用接口如下:
int open (const char* path,int flags)
功能:打开文件;
参数:第一个是要打开的文件;
第二个是打开文件的方式
必选:
(O_RDONLY((只读),O_WRONLY(只写),O_RDWR(读写))
非必选:
O_CREAT //若文件存在打开,不存在则创建
O_EXECL //与O_CREAT同用时,若文件存在则报错
O_TRUNC //若文件存在则将文件长度截为0
0_APPEND //追加
返回值:失败返回-1,成功返回文件描述符
int open (const char* path,int flags, mode_t mode)
功能:创建文件
参数:第一个参数是要创建的文件和路径;
第二个是创建方式:在必选项(O_RDONLY((只读),O_WRONLY(只写),O_RDWR(读写))后面加上O_CREAT或者O_EXECL;
O_WRONLY|O_CREAT
第三个参数是给文件的权限,例如0644;
int read(int fd, char *buf,size_t len)
功能:从fd文件中读取len字节的数据到从buf开始的空间去
参数:第一个是要读的文件(描述符);
第二个参数:读到另外一个空间的地址;
第三个是:所读数据的大小,以字节为单位
返回值:成功返回实际读取的字节数
int write(int fd ,const char*buf,size_ t len)
功能:往fd所指文件中写入到从buf开始的缓冲区中len字节的数据
返回:实际读写长度,出错返回-1
int close(int fd)
功能:关闭文件
参数:要关闭的文件的文件描述符
int lseek(int fd, off_ t offset,int whence );
功能:用来改变读写一个文件时读写指针的位置
参数:第一个是已经打开的文件的描述符
offset:读写位置的偏移量,由whence来决定
whence:分为三种:SEEK_SET偏移位置为文件一开始,SEEK_CUR偏移位置为当前位置,SEEK_END偏移位置为文件内容末尾)
返回值:新的相对于文件开头偏移量
举例说明:
文件fd内容为“abcdefg”,
int set = lseek(fd, 0, SEEK_END);
write(fd, "hello", 6);
就实现了从文件原内容末尾写入(SEK_SET偏移位置为文件一开始,SEK_CUR偏移位置为当前位置,SEK_END偏移位置为文件内容末尾)
对文件操作的代码: