应用篇一--标准IO
一、文件的概念与类型
1、文件的概念
一组
相关数据
的有序集合
2、文件的类型
常规文件
r目录文件
d字符设备文件
c块设备文件
b- 管道文件 p(了解)
- 套接字文件 s(了解)
符号链接文件
l
二、标准I/O的介绍
1、标准I/O – 介绍
I input 输入设备 比如键盘鼠标都是Input设备
O output 输出设备 比如显示器
优盘,网口,既是输入也是输出
标准I/O
由ANSI C标准
定义
主流操作系统上都实现了
C库
标准I/O
通过缓冲机制
减少系统调用,实现更高的效率
我们C语言经常使用的stdio.h
就是标准的I/O文件。
2、系统调用和库函数
系统调用
就是操作系统
提供的接口函数
.
如果我们把系统调用
封装成库函数
就可以起到隔离的作用,提供程序的可移植性。
Printf就是库函数
然后调用了系统调用
才在显示器上显示字符。
3、标准I/O – 流
FILE
标准IO
(stdio.h)用一个结构体类型
来存放打开的文件的相关信息
标准I/O
的所有操作
都是围绕结构体FILE
来进行
流(stream)
FILE
又被称为流
(stream)文本流/二进制流
4、Windows 和linux的换行符区别
Windows
二进制流: 换行符是‘\n’
文本流: 换行符是‘\r’ ‘\n’-回车加换行
Linux
换行符只有‘\n’
5、标准I/O – 缓冲概念与类型
系统调用
就是操作系统
提供的接口函数
-
全缓冲
缓冲区满
才输出 -
行缓冲
遇到换行符
输出 -
无缓冲
数据直接写入文件,流不进行缓冲
三种标准IO :
标准I/O预定义3个流,程序运行时自动打开
stdin/stdout
默认是行缓冲
stderr没有缓冲
例如:
/*
* @Author: 修成真
* @Date: 2021-10-13 10:04:31
* @LastEditTime: 2022-03-15 11:40:54
*/
#include <stdio.h>
#include <unistd.h> //Sleep函数所在的头文件
int main(int argc,const char *argv[])
{
int i;
/*这里的数是我虚拟机的缓存大小,1024也就是1k个字节,
打印1个字节的字符a时,由于没有遇到换行符,打印的字符
不断存入缓存区,因此循环数小于1024时,字符无法打印,
大于1024时,缓存区满,自动打印出1024个a*/
for(i = 0; i < 1025; i++)
{
printf("a");
}
/*加入循环是为了不让程序结束,因为程序结束会自动把缓存区的
数据打印出来*/
while(1)
{
sleep(1); //Sleep函数:是释放cpu给其他应用程序使用的库
}
}
三、文件的打开与关闭
1、文件的打开和关闭概念
打开
就是占用
文件资源
关闭
就是释放
文件资源
2、文件的打开
文件的打开函数
FILE *fopen (const char *path, const char *mode);
Path
:
普通文件当前路径
下不需要加目录,其他要加上完整的路径与文件名
Mode
:
返回值:出错返回NULL
,所以使用fopen函数必须判断是否为空
文件打开的模式-mode(非常重要)
打印文件出错的函数
当使用fopen
打不文件时,可以使用perror函数
、strerror库函数
打印错误信息
perror库函数
头文件stdio.h
strerror库函数
头文件errno.h
string.h
3、文件的关闭
文件的打开函数:
int fclose(FILE *stream)
fclose()
调用成功
返回0
,失败
返回EOF(-1)
,并设置errno
流关闭
时自动刷新缓冲中的数据并释放缓冲区,比如:常规文件把缓冲区内容写入磁盘- 当一个程序正常终止时,
所有打开的流
都会被关闭 fclose()
函数的入参stream必须保证为非空
,否则出现断错误
。
文件打开与关闭的程序案例:
#include<stdio.h>
#include<string.h>
#include<errno.h> //使用errno需要的头文件
int main(int argc, const char *argv[])
{
FILE *p = fopen("1.txt", "r+");
int q;
if(p == NULL)
{
//printf("open file fail!\n"); //用户自己打印错误信息
//perror("fopen:"); //perror的使用,先打印字符串,在打印错误信息
/*strerror的使用,errno为错误序号,不加头文件会报错*/
printf("fopen:%s\n", strerror(errno));
}
else
{
//printf("open file success!\n"); //用户自己打印错误信息
perror("fopen:");
q = fclose(p);
if(q == 0)
printf("file close succes!\n");
else
{
printf("fopen:%s\n", strerror(errno));
}
}
return 0;
}
到这里就结束啦!