第三节 标准IO函数说明

标准IO函数:软件级别的操作函数

fopen:打开一个文件

    #include 
    FILE *fopen(const char *path, const char *mode);

    path:打开文件的路径
    mode:打开文件的权限
        r:只读,文件定位在开头
        r+:读写,文件定位在开头
        w:只写,并且会将内部内容清空,文件定位在开头,文件不存在会被创建
        w+:读写,文件不存在会被创建,文件定位在开头
        a:只写,文件定位在末尾,如果不存在会被创建
        a+:读写,文件定位在末尾,如果不存在会被创建

    返回值:
        成功返回一个文件指针
        失败返回NULL

fclose:关闭文件指针

    #include 
    int fclose(FILE *stream);

    stream:文件操作指针

    返回值:
    成功返回0
    失败返回EOF

fread:读取文件内容

    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    ptr:读取的内容存放到哪里
    size:每一块数据的大小
    nmemb:多少块数据
    stream:文件指针

返回值:
    函数正常返回读取到的块数,以下这几种情况将会返回不等于块数的返回值:
        A、文件读到末尾了,剩余的内容不够读满那么多块,那他就会返回读到多少块整块,而后面不满一块的内容,虽然已经读了,但是他不会记录在总数中
            调用feof判断文件是否到达末尾
        B、文件读取出错了
            调用ferror判断文件是否出错

fwrite:写入数据到文件中

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                 FILE *stream);
    ptr:写入的内容
    size:每一块数据的大小
    nmemb:多少块数据
    stream:文件指针

返回值:
    函数正常返回写入的块数,以下这一种情况将会返回不等于块数的返回值:
        文件写入出错了
        调用ferror判断文件是否出错

ferror函数:判断文件出错

    int ferror(FILE *stream);
    判断文件操作是否出错
    如果出错返回真(非0值)

feof:判断文件操作是否到达文件末尾

int feof(FILE *stream);
判断文件操作是否到达文件末尾
如果到达则返回真

clearerr:

void clearerr(FILE *stream);
清楚文件操作中的错误标志,以不至于每次调用ferror都判断出错

ftell:测量当前位置到文件开头的距离

    long ftell(FILE *stream);

fseek:偏移文件的操作位置

    int fseek(FILE *stream, long offset, int whence);
    stream:文件指针
    offset:偏移多少个字节
    whence:从哪里开始偏移
    SEEK_SET, SEEK_CUR, or SEEK_END

    返回值:
        成功返回0
        失败返回-1

rewind:将操作位置直接定位到文件开头

    void rewind(FILE *stream);

    fdopen:通过文件描述符调用标准IO的借口,返回一个文件指针
    FILE *fdopen(int fd, const char *mode);
    fd:文件描述符
    mode:打开的权限(同fopen)
    注意:这个权限应该跟open打开的权限一致

    返回值:
    返回一个操作指针

freopen:重新一个文件打开

    FILE *freopen(const char *path, const char *mode, FILE *stream);
    用于重新用新的权限打开一个一样的文件
    path:文件路径
    mode:文件的权限
    stream:文件之前打开的文件指针

    返回值:
    返回一个新的文件操作指针
    失败返回NULL

fileno:获取对应的文件指针的文件描述符

    int fileno(FILE *stream);

fflush:清除缓冲区

fprintf:

    打印指定内容到文件指针当中
    int fprintf(FILE *stream, const char *format, ...);
    stream:你想要打印的文件指针
    format:数据格式,之后这段内容会打印到stream当中
    ...:变参函数的参数

dprintf:打印指定内容到文件描述符当中

    int dprintf(int fd, const char *format, ...);
    fd:你想要答应的文件描述符
    format:数据格式,之后这段内容会打印到stream当中
    ...:变参函数的参数

    #include 

        int vprintf(const char *format, va_list ap);
        int vfprintf(FILE *stream, const char *format, va_list ap);
        int vdprintf(int fd, const char *format, va_list ap);
        int vsprintf(char *str, const char *format, va_list ap);
        int vsnprintf(char *str, size_t size, const char *format, va_list ap);


        以上函数跟printf等函数用法跟意义一致,只是他们用配合变参函数的参数列表来引用
        va_list:这个是变参函数的数据指针(链表头)

fscanf:从指定的文件指针中获取格式化数据

    int fscanf(FILE *stream, const char *format, ...);
    stream:文件指针
    format:指定格式
    ...:存入的参数(地址)

int fgetc(FILE *stream);

    从steam中获取一个字符

char *fgets(char *s, int size, FILE *stream);

    从stream专用获取一行(如果一行超过size的大小,则size这么大)存放到s中

int getc(FILE *stream);

    从steam中获取一个字符(宏函数,最好用fgetc)

int getchar(void);

    从键盘获取一个字符

int ungetc(int c, FILE *stream);

    反向往stream中扔入一个字符到steam的缓冲区中

int fputc(int c, FILE *stream);

    往steam中写入一个字符c

int fputs(const char *s, FILE *stream);

    往stream中写入s数据

int putc(int c, FILE *stream);

    往steam中写入一个字符c

int putchar(int c);

    往屏幕输出一个字符c

int puts(const char *s);

    往屏幕输出s数据

课后习题

目录索引(将目录里面的所有文件打印出来)

你可能感兴趣的:(第三节 标准IO函数说明)