===================================================
标准I/O
===================================================
Linux中的文件分类:
符号
1.普通文件 -
2.目录文件 d
3.符号链接文件 l
4.管道文件 p
5.套接字文件 s
6.块设备文件 b
7.字符设备文件 c
===================================================
文件的模式分类:
1.文本文件
2.二进制文件
===================================================
文件描述符:是指文件相对应的下标,从0开始
对应的硬件
0:标准输入 键盘 stdin
1:标准输出 屏幕 stdout
2:标准错误输出 屏幕 stderr
0,1,2已被使用,其他文件的文件描述符从3开始
标准输入,标准输出,标准错误输出是三个特殊的流,一直存在于系统中。
===================================================
标准IO分为2种:
1.非格式化IO:是指无法自定义输入输出的格式
fgetc/getc/getchar
fgets/gets
fread
2.格式化IO:是指可以自定义输入输出的格式
fputc/putc/putchar
fputs/puts
fwrite
===================================================
标准I/O的操作函数都是在<stdio.h>头文件中
文件操作的基本流程(即文件的打开,读取,写入,关闭):
1.打开文件
fopen()函数:
打开文件
格式:
#include <stdio.h>
FILE* fopen(const char* pathname , const char* mode );
fopen函数的解释:
FILE*:是指fopen函数的返回值是文件指针类型
第一个参数pathname:是指文件路径名(即包含文件相对路径或绝对路径的文件名)
第二个参数mode:是指访问(打开)文件的模式(方式)
文件打开方式有:
1.r:读
- 以只读的方式打开文件
- 文件存在,则直接打开并对文件进行读取操作
- 文件不存在,则报错
2.w:写
- 以只写的方式打开文件
- 文件存在,则打开文件并清空里面的内容,然后对文件进行写入操作
- 文件不存在,则创建该文件,然后打开该文件,然后对文件进行写入操作
3.a:追加
- 以追加的方式打开文件
- 文件存在,则打开文件并从文件末尾开始追加写入操作
- 文件不存在,则创建该文件,然后对文件进行写入操作
4.r+:扩展读
以读写的方式打开文件(既可以读取操作,也可以写入操作)
- 文件存在,则直接打开并对文件进行读取操作
- 文件不存在,则报错
5.w+:扩展写
- 以读写的方式打开文件(既可以读取操作,也可以写入操作)
- 文件存在,则打开文件并清空里面的内容,然后对文件进行写入操作
- 文件不存在,则创建该文件,然后打开该文件,然后对文件进行写入操作
6.a+:扩展追加
- 以读写的方式打开文件(既可以读取操作,也可以写入操作)
- 文件存在,则打开文件并从文件末尾开始追加写入操作
- 文件不存在,则创建该文件,然后对文件进行写入操作
注意:
打开方式可以组合使用
例子:
rw:表示可以对文件同时进行读取和写入操作
ra:表示可以对文件进行读取操作和在末尾写入操作
fopen函数的返回值:
1.成功打开文件,则返回该文件的文件指针(即文件的地址)
2.打开文件失败,则返回NULL(即空指针)
- 作用:可用于判断文件是否成功被打开
例子:
#include <stdio.h> //<stdio.h>头文件中包括了文件I/O操作
int main()
{
FILE* f1 = fopen("./hello.txt" , "r"); //以只读的方式打开文本文件hello.txt
if (f1 == NULL)
{
//1.打开文件
printf("文件打开失败!");
return -1;
}
printf("文件打开成功!\n地址是:%p\n",f1);
//2.关闭文件
fclose(f1); //每次都要关闭已打开的文件,降低系统的负荷
printf("f1 closed successfully!\n");
return 0;
}
- Linux中的fopen函数设置了错误返回值error,可以使用perror函数打印出文件打开失败的原因
例子:
#include <stdio.h>
#include <errno.h> //使用errno返回错误信息的头文件
int main()
{
FILE* f1 = fopen("./hello.txt" , "r"); //以只读的方式打开文本文件hello.txt
printf("%d\n", errno); //返回错误码,没有错误则返回0
if (f1 == NULL)
{
//1.打开文件
perror("file open fail:"); //返回错误码下的具体错误信息
return -1;
}
printf("文件打开成功!\n地址是:%p\n",f1);
//2.关闭文件
fclose(f1);
printf