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);