0
点赞
收藏
分享

微信扫一扫

APUE 学习笔记(I/O之标准I/O)

IT影子 2022-01-23 阅读 106

标准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();

/*******************************************************/
持续更新中

举报

相关推荐

0 条评论