Linux系统:
一切皆是文件
b block
块设备文件 (文件IO)
c character
字符设备文件 (文件IO)
d directory
目录文件 (目录IO)
- 普通文件 (标准IO、文件IO)
l link
链接文件 (链接IO)
s socket
套接字文件 (文件IO)
p pipe
管道文件 (文件IO)
标准IO:
stdio.h
putchar fopen/fclose
getchar fgetc/fputc
puts fgets/fputs
gets fread/fwrite
printf fscanf/fprintf
scanf
1.普通文件类型:
(1)ASCII码文件
文件中存放的数据都是能显示在终端上的字符组成
(2)二进制文件
文件中存放的数据不一定都是能够显示在终端的字符
注意:
ASCII码文件是一种特殊的二进制文件
2.流:
(1)有方向性
(2)具有连续性
(3)先进先出、后进后出特性
3.操作文件步骤:
(1)打开文件
(2)写入/读出
(3)关闭
4.函数接口:
(1)fopen
FILE *fopen(const char *pathname, const char *mode);
功能:
打开文件并与其建立流
参数:
pathname:要打开文件名的字符串首地址
mode:打开文件权限
r 只读
文件存在只读打开
文件不存在报错
r+ 读写
文件存在读写打开
文件不存在报错
w 只写
文件存在,对文件清0,只写打开
文件不存在,创建文件,只写打开
w+ 写读
文件存在,对文件清0,写读打开
文件不存在,创建文件,写读打开
a 追加只写
文件存在,追加只写打开
文件不存在,创建文件,只写打开
a+ 追加读写
文件存在,追加读写打开
文件不存在,创建文件,读写打开
返回值:
成功返回打开获得的文件流指针
失败返回NULL
(2)fclose
int fclose(FILE *stream);
功能:
关闭流
参数:
stream:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
5.三个特殊流:
程序运行时,操作系统会默认打开三个流:
stdin 标准输入流 gets getchar scanf
stdout 标准输出流 puts putchar printf
stderr 标准出错流 perror
6.流的读写:
缓存:
1.缓存类型:
(1)全缓存 4k == 4096
缓存区满刷新
(1)程序结束刷新
(2)缓存区满刷新
(3)fflush函数刷新
与文件建立的缓存一般为全缓存
(2)行缓存 1k == 1024
缓存区遇到\n刷新
(1)程序结束刷新
(2)缓存区满刷新
(3)fflush函数刷新
(4)遇到\n刷新
与终端建立的缓存一般为行缓存 stdout stdin
(3)不缓存 0k
立即刷新
人机交互、界面控制、出错处理一般使用不缓存 stderr
2.改变缓存类型
setvbuf
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
修改文件流指针的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
指定缓存区大小
返回值:
成功返回0
失败返回非0
读写函数:
1.fputc和fgetc
应用场景:
1.操作ASCII码文件
2.操作单个字符
(1)fputc
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:写入文件中字符的ASCII码值
stream:文件流指针
返回值:
成功返回写入字符的ASCII码值
失败返回EOF(-1)
注意:
1.fputc写入文件中的是字符
2.fputc写入一个字符
练习:利用fputc向文件file.txt中写入"hello world"
(2)fgetc
int fgetc(FILE *stream);
功能:
从流中读取字符
参数:
stream:文件流指针
返回值:
成功返回读取字符的ASCII码值
失败返回EOF
读到文件末尾返回EOF
2.fputs/fgets
应用场景:
1.操作ASCII文件
2.操作字符串
(1)fputs
int fputs(const char *s, FILE *stream);
功能:
向流中写入字符串
参数:
s:写入字符串的首地址
stream:文件流指针
返回值:
成功返回非负整数
失败返回EOF
7.主函数传参:
int main(void);
void main(void);
int main(int argc, const char *argv[]);
int main(int argc, const char **argv);