标准I/O(stdio):一切实现的基础
stdio相关函数:man手册第三章
man手册第一章:基本命令
man手册第二章:系统调用
man手册第三章:标准库函数
man手册第七章:机制
注意:在标准IO中有一个FILE类型贯穿始终
1.fopen()
原型:FILE *fopen(const char *path , const char *mode)
(1) const修饰说明函数不会修改用户传过来的内容,让用户放心用(知识点:指针常量,常量指针)。
(2)返回值注意点:当失败时,不仅返回一个NULL,还会设置errno。errno需要马上打印。系统路径:/usr/include/asm-generic/
2.fclose();
注意:谁打开谁关闭
3.fgetc();
4.fputc();
注意:返回值为int,这对函数较为通用,因为不管是什么字符都可以读取,直到读到文件尾,fget()返回EOF。相比于fgets()读取要好一点,因为fgets()在遇到’\n‘或者文件尾时结束。
5.fgets();
注意点:读取stream,遇到\n或者文件结尾时结束,并且在结尾追加’\0’,读取失败时返回NULL
6.fputs();
注意点:向stream输出字符串(以’\0’结束),当fgets()与fputs()结合使用的时候,要注意文件当中是否存在空洞。
7.fread();
8.fwrite();
注意:能够以item形式读取,但读取过程不能出错,否则后续读取内容将出错。所以最好是当作fgetc(),fputc()来使用。
9.printf();
10.scanf();
注意点:要注意缓冲模式:
(1)行缓冲模式,终端设备,例如stdout。刷新:遇到’\n’或者强制刷新。
(2)全缓冲模式,默认。刷新:满了刷新或者强制刷新
(3)无缓冲模式,例如stderr。立即输出
示例代码:
#include <stdio.h>
#include <stdlib.h>
{
FILE *p;
p = fopen("b" , "w");//b为自建文件。
if(p == NULL)
{
perror("fopen()");
exit(1);
}
fprintf(p , "hello world!");
//fclose(p);//当不加这句时文件b中 ,写不进hello world!,要想写入,可调用fflush(),fclose(p) ,或者hello world后加\n.
while(1);
exit(0);
}
11.fseek();
12.ftell();
注意:问题:
fseek(FILE * stream , 0 , SEEK_END);
feof(FILE* stream);
//以这种方式,feof()的返回值是0,即判断还不是文件尾。
fseek(FILE *stream , 0 , SEEK_END)
fgetc(stream);//可以知道肯定读取失败,指针位置并未改变
feof(stream)
//此时feof(stream)返回1,即判断是文件尾
13.rewind();
14.fflush();
/*******************************************************/
持续更新中