在Linux下一切皆文件,比如:.txt,.c,.h,.jpg,目录,键盘,鼠标,显示器、硬盘等等都是文件,即IO。文件操作的统一思想:打开文件,读、写文件,关闭文件。
文件的类型:
b 块设备文件 存储设备(硬盘)
c 字符设备文件 输入输出设备
d 目录文件
- 普通文件 .c .h .txt .jpg .png .mp4 a.out ============>ASCII文件 二进制文件
l 软链接文件
s 套接字文件 网络通信
p 管道文件 进程间通信
一 标准IO:
打开文件:fopen
读写文件:
fgetc fputc:一个字节读写 作用:主要用来操作普通文件(ASCII文件、二进制文件)
fgets fputs:一行读写 作用:主要用来操作普通文件中的ASCII文件,不能操作二进制文件
fwrite fread:按照指定大小读写(读写结构体) 作用:主要用来操作普通文件(ASCII文件、二进制文件)
关闭文件:fclose
二 函数接口:
1. FILE *fopen(const char *pathname, const char *mode);
功能:打开一个文件
参数:
pathname : 要打开文件的文件名
mode :打开方式:
"r" :只读方式打开, 文件必须要存在
"r+" :读写方式打开,文件必须要存在
"w":以写的方式打开,文件不存在则创建,文件存在则清空
"w+":以读写方式打开,文件不存在则创建,文件存在则清空
"a":打开追加写,文件不存在则创建
"a+":以读写方式打开,追加写,文件不存在则创建
返回值:成功:文件流指针FILE *;失败: NULL
2. int fclose(FILE *stream);
功能:关闭文件流指针所对应的文件(释放资源)
文件流:FILE-文件流结构体;FILE *-文件流指针;标准IO在每打开一个文件时,都会将一个文件和一个文件流指针相关联。
操作系统默认打开的三个流:
stdin :标准输入流 : 默认关联键盘
stdout:标准输出流: 默认关联显示终端
stderr:标准出错流: 默认关联显示终端
3. int fputc(int c, FILE *stream);
功能:向文件中写入一个字节
参数:
c : 要写入的数据
stream:要写入的文件流指针
返回值:成功:返回写入数据的整型值;失败:EOF(-1)
4. int fgetc(FILE *stream);
功能:从文件中读一个字符
参数:stream : 要读的文件流指针
返回值:成功:返回督导字符的ascii;失败:EOF,读到文件末尾:EOF
5. int fputs(const char *s, FILE *stream);注意:此函数接口不会写入'\0'
功能:向文件中写入一行字符串
参数:
s : 要写入数据的首地址
stream:写入的文件流指针
返回值:成功: >=0;失败 :EOF。
6. char *fgets(char *s, int size, FILE *stream);
功能:读取一行数据到到s指向的空间,遇到'\n'停止读
参数:
s:存储读取到数据的空间首地址
size :期待读到的字节数
stream:要读的文件流
返回值:成功:返回s的首地址;失败:NULL,文件末尾:NULL
fputs和puts,fgets和gets的区别:
fputs与puts:puts会自动输出一个'\n'
fgets与gets:
1. gets会将终端最后输入的'\n'替换成'\0', fgets只是在最终读到的字符串末尾添加'\0';
2. gets是危险的,因为没有限制输入数据的大小,fgets有限制;
3. fgets如果size比要读区的数据小,最多读取size-1个字节,最后一个字节位置存放\0;
7. size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:向文件中写入指定大小的nmemb个元素
参数:
ptr :要写入数据的首地址
size:写入的每个元素的大小
nmemb:要写入的元素的个数
stream:要写入的文件流指针
返回值:成功:实际写入的元素个数;失败:0
8. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取nmemb个元素
参数:
ptr:要存放读取到的数据的首地址
size:每个元素的大小
nmemb:期望读到的元素的个数
stream:要度的文件流指针
返回:成功:返回实际读到的元素个数;失败:0,读到达文件末尾:0
标准IO---文件定位函数:
1. int fseek(FILE *stream, long offset, int whence);
功能:重新定位文件流位置
参数:
stream:要重新定位的文件
offset:从指定位置进行偏移的偏移量
whence:指定的位置:SEEK_SET:文件开头,offset:正;SEEK_CUR:当前位置,offset:可正可负;SEEK_END:文件末尾,offset:可正可负
返回值:成功:0;失败:-1
2. long ftell();
功能:返回流所在位置到文件开头的偏移量
3. rewind();
功能:流复位文件的开头
4.fprintf()
功能:将格式化后的字符串写入到文件
5. int sprintf(char *str, const char *format, ...);
功能:将格式化后的字符串写道str指向的内存空间,字符串的拼接,要将某种基本数据类型转换成字符串类型
6. fscnaf();
功能:从文件中读出格式化后的数据
7. sscanf();
功能:从内存中获取格式化后的数据
时间的函数接口:
time();功能:获取1970-1-1 0:0:0到现在的秒数
ctime();功能:将秒数转换成字符串时间
localtime();功能:将秒数转换成日历时间
char *strtok(char *str, const char *delim);
功能:分割字符串
参数:
str :需要被分割的字符串
delim:分隔符
返回值:成功:返回分割后的字符串首地址;失败:NULL