文件指针FILE*及文件描述符fd

文件指针

   在C语言中,通过文件指针可以对文件进行相应的操作,定义说明文件指针的一般形式为:FILE *指针变量标识符。

   FILE实际是由系统定义的一个结构体,它包含的字段有文件描述符和缓冲区等。

   通常程序运行后会打开:stdin--文件输入流,stdout--文件输出流,stderr--文件错误流,它们对应了键盘、显示器、显示器,它们的类型都为FILE*。

   由于fwrite,printf都有缓冲区,而缓冲区由C语言提供,主要影响读写,所以FILE结构体中包含了缓冲区字段。

FILE结构体:

#include<stdio.h>
struct _iobuf { 

char *_ptr; //文件输入的下一个位置 

int _cnt; //当前缓冲区的相对位置 

char *_base; //指基础位置(即是文件的其始位置) 

int _flag; //文件标志 

int _file; //文件的有效性验证 

int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 

int _bufsiz; //文件的大小 

char *_tmpfname; //临时文件名 

}; 

typedef struct _iobuf FILE;

文件描述符fd

    内核利用文件描述符fd(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

    每个程序运行时,都会打开stdin,stdout,stderr,它们对应的文件描述符依次为0,1,2,而文件描述符从当前未被使用的最小文件描述符开始依次使用,所以一般程序运行后,新建文件的文件描述符会从3开始使用。

    每个进程在进程控制块PCB中都有一个文件描述符表,文件描述符fd是张表的索引,这张表的每个表项都有一个指向已打开文件的指针,而已打开的文件在内核中使用FILE结构体表示。

文件描述符表:
这里写图片描述

文件指针和文件描述符的区别

   文件描述符fd:只要打开文件,就会获得一个非负整数的文件描述符fd。
   文件指针FILE:进程在PCB中通过fd找到它所指向的文件指针FILE*,而文件指针指向进程中的FILE结构体,它包含文件描述符和缓冲区等字段。
   所以,它们是完全不同的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值