IO输入输出,操作对象是文件
Linux文件类型:
b block 块设备文件
按块扫描设备信息的文件
存储设备c character 字符设备文件
按字符扫描设备信息的文件d directory 目录文件
存放文件- 普通文件
存放数据
图片、音视频、压缩包、文本文件l link 链接文件
快捷方式s socket 套接字文件
用来套接字通信p pipe 管道文件
用来进程间通信
普通文件:
1.ASCII码文件
文件中所有的字符均为能够在终端上显示的字符
文本文件、程序.c
2.二进制文件
文件中存放数据的二进制形式
图片、音视频、压缩包ASCII码文件是特殊的二进制文件
标准IO、文件IO
标准IO是库函数
文件IO是系统调用系统调用:功能强大,应对复杂场景不够灵活
库函数:针对系统调用的封装,使用方便灵活标准IO可以在Windows或者Linux平台使用
文件IO只能在Linux系统平台使用
标准IO:
getchar putchar scanf printf gets puts -> 标准IO
#include <stdio.h>
fopen/fclose
fgetc/fputc
fgets/fputs
fscanf/fprintf
fread/fwrite
fseek/rewind/ftell
从文件中读写数据的流程:
打开文件 -> 读写文件 -> 关闭文件
fopen fclose
fgetc/fputc 单个字符的读写
fgets/fputs 字符串的读写
fscanf/fprintf 格式化字符串的读写
fread/fwrite 二进制文件的读写
7.函数接口:
1.fopen
FILE *fopen(const char *pathname, const char *mode);
功能:
打开pathname对应的文件并与其建立一个文件流
参数:
pathname:要打开文件路径的字符串
mode:
r 只读 文件不存在报错,文件存在只读打开
r+ 读写 文件不存在报错,文件存在读写打开
w 只写 文件不存在创建,文件存在将文件内容清空,只写打开
w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开
a 追加只写 文件不存在创建,文件存在追加只写打开
a+ 追加写读 文件不存在创建,文件存在追加写读打开
返回值:
成功返回打开的文件流指针
失败返回NULL
#include <stdio.h>
int main(void)
{
FILE *fp = NULL;
fp = fopen("a.txt", "r");
if (NULL == fp)
{
perror("fail fopen");
return -1;
}
printf("fopen success!\n");
fclose(fp);
return 0;
}
2.fclose
int fclose(FILE *stream);
功能:
关闭文件,释放文件流指针
参数:
stream:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
8.文件流:
1.具有方向性(读写)
2.具有连续性
3.具有顺序性
句柄:操作对象的一个抽象
9.特殊的三个文件流:
stdin 标准输入流 从终端读取数据
stdout 标准输出流 向终端打印数据
stderr 标准出错流 向终端打印数据
getchar、scanf、gets 通过stdin来读取终端数据
putchar、printf、puts通过stdout来向终端输出数据
perror通过stderr来向终端输出数据
#include <stdio.h>
int main(void)
{
fclose(stdin);
fclose(stdout);
fclose(stderr);
getchar();
printf("hello world!\n");
perror("hello world!\n");
return 0;
}
10.标准IO缓存:
缓存分为3类:
1.全缓存 4k
缓存区满刷新
刷新条件:
1.缓存区存满刷新(全缓存大小:4096)
2.fflush函数强制刷新
3.程序结束/fclose刷新
与文件建立的缓存
2.行缓存 1k
遇到\n刷新
刷新条件:
1.缓存区存满刷新(行缓存大小:1024)
2.遇到\n刷新
3.fflush函数强制刷新
4.程序结束/fclose刷新
与终端建立的缓存 stdin stdout
3.不缓存
直接刷新
缓存区大小 0k stderr
人机交互、界面控制、出错处理
4.setvbuf
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
功能:
改变一个流的缓存类型
参数:
stream:文件流指针
buf:指定缓存空间的首地址
mode:
_IONBF 不缓存
_IOLBF 行缓存
_IOFBF 全缓存
size:
设定缓存区的大小
返回值:
成功返回0
失败返回非0 文章来源:https://www.toymoban.com/news/detail-827169.html
#include <stdio.h>
int main(void)
{
char tmpbuff[4096] = {0};
// setvbuf(stdout, NULL, _IONBF, 0); //设置成不缓存
// setvbuf(stdout, tmpbuff, _IOFBF, 4096); //设置成全缓存
setvbuf(stdout, tmpbuff, _IOLBF, 1024); //设置成行缓存
printf("hello world\n");
while (1)
{
}
return 0;
}
文章来源地址https://www.toymoban.com/news/detail-827169.html
到了这里,关于标准IO 2月4日学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!