文件IO就是对文件的输入输出。对于linux来说,linux的一切都是文件,包括文件夹。
一些linux常见的文件类型:-:普通文件
d:目录文件
c:字符设备文件
b:块设备文件
p:管道文件
l:链接文件
标准文件IO(带缓存):【在头文件stdio.h中】
1. 打开文件
fopen
FILE *fopen(const char *path, const char *mode);
a、FILE文件指针
b、const char *path要打开的文件路径
c、const char *mode打开文件方式(权限)
mode说明:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
例:
//打开文件 FILE *file=NULL; //定义一个文件指针 file = fopen("./test.txt", "w+"); //fopen返回打开文件的指针2、读写文件
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数说明:
size_t:读了多少次
void *ptr:读到的数据存放位置
size_t size:一次读多少个字节
size_t nmemb:读多少次
FILE *stream:文件指针,从这个文件中读
//读文件 char buf[128]; ret = fread(buf, 128, 1, file);//从file读到wbuf,读一次,每次读128个字节fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数与fread类似.
//把wbuf内容写入文件 char wbuf[128]; scanf("%s", wbuf); int ret = fwrite(wbuf, strlen(wbuf) ,1,file);//从wbuf写数据到file,写一次,每次写wbuf数据的长度
参数说明:
FILE *stream:要偏移的文件指针
long offset:偏移量
int whence:参照物(有三个参照物,文件头(SEEK_SET),文件尾(SEEK_END),当前位置(SEEK_CUR))
也就是将文件指针移动到离参照物(头,尾,当前)偏移量的地方。
//把文件指针移动到文件开头fseek(file, 0, SEEK_SET);//以头为参照物移动0字节 ftell long ftell(FILE *stream); 计算偏移量(计算文件长度)返回值是long int型 //移动文件指针到文件尾 int ret = fseek(file, 0, SEEK_END); //计算偏移量--文件大小 long size = ftell(file); void rewind(FILE *stream); 把文件指针移到文件头 相当于 fseek ( file , 0 , SEEK_SET );