FILE类在编程语言中的应用是很广泛的,如果只是想简单的使用FILE类来读文件进行读写,那么可以不用了解的很深,但是也要知道FILE中都定义了那些变量以及为什么要定义这些变量。
struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char *_base; //指基础位置(即是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //文件的大小
char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;
那么文件是怎么确定要将文件写入哪个位置呢?
文件是通过文件描述符来确定要写入的位置,即:其中的_file变量。
一般情况下,0—>stdin(标准输入流,从键盘读入),1—>stdout(标准输出,输出到显示屏上),2—>stderr(标准错误,输出到显示屏上)。
那么文件描述符能不能修改呢?
int main()
{
//close(0);
int fd=open("./log", O_WRONLY|O_CREAT, 644);
printf("fd = %d\n",fd);
if(fd<0)
{
perror("open");
eturn 1;
}
char* arr="hello world\n";
write(1, arr, strlen(arr));
close(fd);
return 0;
}
若有close(0),则fd=0;
若没有close(0),则fd=3。
所以文件描述符是可以修改的,每次分配的文件描述符,是当前最小的。
文件描述符与文件的关系: