首页 > 技术文章 > 文件指针与文件描述符

zongzi10010 2019-11-29 20:14 原文


title: 文件指针与文件描述符
date: 2019/11/28 20:01:12
toc: true

文件指针与文件描述符

概念

  • 文件描述符是针对内核的,是一个非负的整数,每个进程的描述符是独立的,标准输入输出和错误是STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO,定义在unistd.h,对应的是open系列的函数

  • 文件指针是FILE *结构指针,标准输入输出和错误对应的文件指针是stdin,stdout,stderr,定义在stdio.h,对应的是fopen系列的函数

缓冲

文件指针是标准IO库的具体实现,标准IO的一个最大的特色就是提供缓冲,加快速度.

  • 全缓冲

  • 行缓冲,默认值在stdio.h,#define BUFSIZ 8192

  • 无缓冲

    #include <stdio.h>
    // 注意 如果参数没有size的,要确保缓冲长度大于 BUFSIZ  这个值定义在 stdio.h  
    /* Default buffer size.  */
    #define BUFSIZ 8192
    void setbuf(FILE *stream, char *buf);
    void setbuffer(FILE *stream, char *buf, size_t size);
    void setlinebuf(FILE *stream);
    
    // 这里如果NULL为空 但是又是行缓冲,则根据stat的st_blksize 调整合适大小  这个大小跟硬件有关 比如页大小
    int setvbuf(FILE *stream, char *buf, int mode, size_t size);
    
    

推荐阅读