文件类型:
常规文件 r:文本文件,二进制文件(比如一些程序)
目录文件 d:文件夹下放的所有文件的名称,以及里面的一些信息,就放在目录文件中
字符设备文件 c:linux中将设备看成一个文件,每个文件代表一种设备,访问设备,也就是访问设备文件
块设备文件 b:
管道文件 p:这是进程间通讯的一种机制
套接字文件 s:也是通讯的一种机制
符号链接文件 l:类似windows的快捷方式文件
标准IO:
标准IO由ANSI C标准定义,就是c库定义好的一些文件输入输出的函数。有c库,我们就能使用标准IO,主流操作系统上都实现了c库。
FILE: 其实就是流,是一个结构体结构体,这个结构体存放打开的文件的相关信息
流有两种,一种是文本流,一种是二进制流。
windows中二进制流:换行符是'\n',而文本流是'\r''\n'
linux不区分文本流和二进制流,对于换行符来说,都是'\n'
流的缓冲类型:
全缓冲:当流的缓冲区无数据,或者无空间时才执行的实际IO操作
行缓冲:当输入输出遇到换行符时,进行实际IO操作。当流和一个终端关联时,是典型的行缓冲。
无缓冲:数据直接写入文件,流不进行缓冲。

实际操作:
打开流的函数: FILE *fopen(const char *path,const char*mode); //第一个参数是文件路径,第二个是打开方式具体如下表
成功时返回流指针,出错返回NULL
下图中,r和rb其实指的是文本流或者二进制流,但是linux中不做区分

新建文件的权限默认是666,也就是rw-rw-rw-
关闭流的函数:int fclose(FILE *stream);
成功时返回0,失败返回EOF,并设置errno。
流关闭时,自动刷新缓冲中的数据并释放缓冲区。
当一个程序正常终止时,所有打开的流都会被关闭。
一个程序,最多只能打开1024个流,去除三个程序默认打开的标准流,只能打开1021个。
读写一个字符的函数:fgetc(FILE *stream)/fputc(int c,FILE *stream) //第一个int c是要输出的字符
读写一行的函数:fgets(FILE *stream)/fputs(FILE *stream)
上述两种方式一般合适读写文本文件,用来读写二进制文件的话,会出现问题。
读写若干个对象的函数:fread()/fwrite() 每次读写若干个对象,文本文件和二进制文件都可以用这两个函数。
tips:getchar()等同于fgetc(stdin)。都是从标准输入流中获得一个字符。putchar()等同于fputc(stdout);
ok,截止到目前,先做一个小练习在往下学:
使用上面说到的fputc和fgetc实现文件复制的程序,实现代码如下:
未完待续。。。
来源:CSDN
作者:无线大脑袋
链接:https://blog.csdn.net/baidu_39491365/article/details/104560851