FILE结构体与文件描述符

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。
所以文件描述符是可以修改的,每次分配的文件描述符,是当前最小的。
文件描述符与文件的关系:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值