| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 549 人关注过本帖
标题:关于文件操作的FILE结构体问题
只看楼主 加入收藏
a451410
Rank: 2
等 级:论坛游民
帖 子:134
专家分:98
注 册:2018-3-4
结帖率:84%
收藏
已结贴  问题点数:5 回复次数:3 
关于文件操作的FILE结构体问题
在我的编译器中 vs2022 中,我用FILE定义了一个文件指针,可是怎么也读不对内容,所以我按F12查看了一下结构体,
记过令我把百思不得其解,在我的vs2022里,FILE是这样的:
程序代码:
#ifndef _FILE_DEFINED
    #define _FILE_DEFINED
    typedef struct _iobuf
    {
        void* _Placeholder;
    } FILE;
#endif

令我百思不得其解,它只是一个void指针.但是我在网上以及msdn里查看的都是以下这样:
程序代码:
struct _iobuf

 {    
    char *_ptr;          
    int   _cnt;          
    char *_base;          
    int   _flag;          
    int   _file;          
    int   _charbuf;          
    int   _bufsiz;          
    char *_tmpfname;          
  }; typedef struct _iobuf FILE;

不知道怎么回事,而且,F12之后也不在stdio头文件中
2024-11-24 20:53
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1709
专家分:4385
注 册:2007-12-27
收藏
得分:5 
我从未关心过FILE结构体的内容和定义位置,因为我不需要。
正常用就行了。
读不对内容应该另有原因,权限啊,属性啊,编码啊,等等。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2024-11-24 21:25
a451410
Rank: 2
等 级:论坛游民
帖 子:134
专家分:98
注 册:2018-3-4
收藏
得分:0 
回复 2楼 forever74
确实不需要这个结构体,用任何一个指针都可以访问到数据.
只是很奇怪为什么这个vs2022会这样,不知道是软件问题,还是sdk问题.
2024-11-25 15:12
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:294
专家分:23
注 册:2008-2-24
收藏
得分:0 
第一种写法的意思就是对你隐藏这个结构体的实际定义,意思是你不要去关心它里面的数据结构是什么东西。你把它原封不动的穿递给比如 fread ,fwrite 这种接收 FILE* 的函数即可。
它里面主要是,比如 windows 上面,需要记录打开文件的 HANDLE 映射成一个 file no,里面有读写缓存(因为传统的读写磁盘,涉及到磁头移动,相对于内存读写操作来说,是耗时很长的操作,所以它一次读写都是一整块数据,然后提前放在缓存里,也就是说,可能第一次是读了一大块数据,你后续的 read 操作,它发现缓存有效,就直接从缓存中返回给你数据,这也防止磁盘 io 操作的木桶短板,拖慢你的程序。

my tech blog: /hoodlum1980
昨天 01:03
快速回复:关于文件操作的FILE结构体问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017543 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved