C 中的 FILE 关键字到底是什么?

2023-12-13

我已经开始学习一些 C 作为一种爱好,并且已经盲目地使用 FILE 作为文件指针的声明相当长一段时间了,我一直在想。这是 C 用来处理文件的关键字或特殊数据类型吗?它是否包含文件内的流和其他数据?为什么定义为指针呢?

举一个例子来说明我的意思,让它更清楚一点:

FILE* fp; //<-- this
fp = fopen("datum.txt", "r");

while(!feof(fp)) {
   // etc.
}

这是 C 用来处理文件的关键字或特殊数据类型吗?

您所指的是标准 io 库使用的 typedef 结构,用于保存 fopen 及其函数系列使用的适当数据。

为什么定义为指针呢?

使用指向结构的指针,您可以将其作为参数传递给函数。例如,这是 fgets 或 fgetc 将接受的内容,形式为function(FILE* fp)

fopen 函数将返回一个指向新创建的 FILE 结构的指针,将这个新指针分配给未使用的指针将导致它们指向同一对象。

它是否包含文件内的流和其他数据?

结构定义似乎比它的描述更虚幻一些。这直接取自我的 stdio.h,来自 MinGW32 5.1.4

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

其中包括之前可爱的评论:

有些人认为,任何心智正常的人都不应使用 这个结构的内部。

这个结构的内容在其他实现上似乎有很大的变化,glibc 源代码通常有某种形式的注释,但它们的结构被隐藏在大量代码下。

留意上述警告是有意义的,而不必担心它会做什么。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的 FILE 关键字到底是什么? 的相关文章

  • 为什么纯虚拟析构函数的实现必须为空?它应该是内联的吗?

    我在其他线程中读到 当您实现纯虚拟析构函数 是的 它可以有一个实现 时 它必须是空的 并且应该 是内联的 应该是空的吗 如果是这样 为什么 应该内联吗 如果是这样 为什么 编辑 这就是纯虚拟析构函数的实现方式 class A virtual
  • 在 ASP.NET Core 中全局重用变量

    我必须强制这些变量在我想使用的每个变量上重用 这让我很困难 我需要创建一个类来定义这些变量并在整个程序中使用它们 我怎样才能做到这一点 string RootFolderName Uplaod string ProductPictureFo
  • 是否有任何替代方法来实现 WebRTC SFU,只有 1 个上传流?

    我有一个服务器 能够将 WebRTC 媒体数据从 A 中继到 B 对于视频会议 如果我们采用 P2P 方法 则会创建一个网状网络 当P2P不起作用的时候 我们就可以拥有这个中继服务器 主要问题是在网状网络中 对于N个参与者来说 上传链路的数
  • 资源文件中的控制字符 C#

    我想添加Left To Right控制字符在resource resx文件输入Visual Studio 我在互联网上搜索并找到了一个名为在 NET 资源文件中转义序列的另一种方法 http www devx com tips Tip 34
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • 具有 Nhibernate 设计问题的领域模型

    我正在尝试进入 DDD with C 世界 我使用NHibernate作为我的ORM工具 因此尝试开发一个PI Persistence Ignorance 模型 但是 在我的一些实体 表示为 POCOS 中 我的属性设置器中有业务规则 例如
  • 更改 Json 中属性的键

    这些天我正在尝试制作一个 json 编辑器 与树视图一起使用 我确实更改了值函数 我也可以更改一些键 但我无法在对象中设置键 我可以设置值 SetValue ref JObject main JToken token JToken newV
  • “双免”是什么意思?

    正如标题所暗示的那样 我是 C 语言的新手 并且很快就会有期中考试 我目前正在修改过去的论文 一个反复出现的主题是双重自由问题 我理解就是调用的过程free 在同一个内存位置两次 但我有几个问题我不能 100 确定如何回答 问题1 C中双重
  • dotnet core 创建文件名中不含“CoreFxPipe_”的命名管道

    使用以下命令创建命名管道时命名管道客户端流 or 命名管道服务器流dotnet core 的类中 关联的 管道 看起来实际上是一个套接字 已自动将 CoreFxPipe 添加到文件名的前面 有没有一种非黑客的方法来防止这种行为 我只是希望文
  • 如何在运行时统一捕捉两个对象?

    这是 3D 模型 我想将另一个像这样的模型连接到顶部的银色连接器 并将另一个模型连接到右侧 所以请帮助我捕捉它 https i stack imgur com qoWwl png我想知道如何在运行时将两个 3D 对象对齐在一起 即 在 玩
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • 使用 C# 在 XML 文档中查找特定值的好方法是什么?

    我正在调用 Oracle 公开的 WebService 它接受 ItemID 的输入并向我返回相应的 Item Number 我想获取从响应中包含的 XML 返回的项目编号 XML 看起来像这样
  • WiX 安装程序在 vs 2012 上不起作用

    我想为我的应用程序创建一个安装程序 我已经下载了 WiX 3 6 并将其安装在 vs 2012 上 创建简单的winform应用程序 将 WiX 安装项目添加到我的解决方案中 右键单击参考并将我的 winform 应用程序添加到安装程序的参
  • 从高斯分布中采样随机值的最快方法是什么?

    The Box Muller 变换 http en wikipedia org wiki Box E2 80 93Muller transform 是一种从高斯分布中采样随机值的优雅且性能合理的方法 我正在寻找一种用 C 编写 清晰的更快方
  • 获取上下文菜单的控制

    我有一个如下所示的上下文菜单 A 1 2 3 选择 1 2 或 3 后 我需要访问调用上下文菜单的对象 意思是如果这是 textbox1 的上下文菜单 那么我需要访问该对象 我该怎么做 忘了说了 这是一个WPF应用程序 所以我使用 Syst
  • 成员函数的Decltype

    class A int f int x int j return 2 decltype f p 给我错误 error decltype cannot resolve address of overloaded function 我不明白为什
  • Web API 2 c# 中的 Google reCaptcha

    我有一个 ASP NET Web API 2 项目 我正在尝试从表单中读取 Google Captcha 我尝试了这段代码 public string Post FoundingRequest model var response Requ
  • 在方法签名中使用 new 关键字通常只是为了可读性吗?

    我读过关于new关键词在方法签名中并看到了下面的例子this https stackoverflow com questions 1014295 c sharp new keyword in method signature发帖了 但还是不
  • 如何在迭代时从地图中删除?

    迭代时如何从地图中删除 喜欢 std map
  • 对数据绑定组合框进行排序的最佳方法是什么?

    我对此做了一些研究 似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序 在本例中为数据集中的数据表 如果是这种情况 那么问题就变成对数据表进行排序的最佳方法是什么 组合框绑定在设计器中设置初始化使用 myCombo DataSou

随机推荐

  • 声明 JavaScript 数组时“{}”和“[]”有什么区别?

    声明 JavaScript 数组时 和 有什么区别 通常我声明像 var a 将数组声明为的含义是什么var a 似乎没有人解释数组和对象之间的区别 正在声明一个数组 正在声明一个对象 数组具有对象的所有功能以及附加功能 您可以将数组视为对
  • 使用不同的列/线宽度绘制热图

    我正在模拟一些东西 想找出两个参数的影响 因此 我改变它们 并查找每对参数值的结果 并得到如下结果 0 1000 2000 3000 4000 5000 0 13 2 14 8 19 9 25 5 27 3 1000 21 3 25 9 3
  • 什么时候我们需要多个Dispatcher Servlet?

    哪些场景下我们需要多个Dispatcher Servlets 谁能告诉我的用例multiple Dispatcher Servlets 我认为每个用例都可以通过使用来解决single Dispatcher Servlet 来自文档 Web
  • 由于错误,无法使用特定项目的 gh-pages 进行部署:无法生成 sh:没有这样的文件或目录

    继续报错 错误 无法生成 sh 没有这样的文件或目录 致命 无法分叉 该项目构建正确 但在尝试部署我的网站时失败 网站是在我的 Windows 8 电脑上使用 create react app 使用命令 gh pages d build 创
  • 如何使用图标呈现数据绑定的 WinForms DataGridView 列?

    在我的 C Windows 窗体应用程序中 我有一个DataGridView绑定到一个BindingList
  • 分页链接中重复参数的问题?

    问题是 当我加载第 2 页时 URL 变为 这很好 但是当我翻到第 3 页时 它变成了 依此类推 每次从分页链接加载新页面时 它都会添加一个当前页面参数 我想知道这个问题如何解决 这是分页功能的一些代码 build the paginati
  • 如何在 Rails 6 中使用自定义 jQuery

    我已经思考这个问题好几天了 由于某种原因 我的语义用户界面 jQuery 无法工作 这就是我所做的 在我的 webpack environment js 上 const environment require rails webpacker
  • gridview中的Oracle数据库表

    我想从 Oracle 数据库中的查询中获取结果并将其放入网格视图中 现在我的问题是 我不知道如何在网格视图中输出它 我正在使用工具箱中的 gridview 并且我的 Oracle 连接正常 我也有权利SELECT查询 我可以将其输出到列表框
  • Java 每 0.5 秒在动画中移动 jlabel

    我想要简单的动画每 0 5 秒设置一次位置 但它不会仅在循环结束时设置位置动画 int x 1 整数y 1 while x lt 100 jLabel1 setLocation x y x x 10 y y 10 try Thread sl
  • Flink广播状态如何初始化?

    我们正在尝试构建一个用例 其中来自流的数据通过计算公式运行 但公式本身也应该 很少 可更新 通过阅读文档 在我看来 Flink 广播状态非常适合这种情况 作为实验 我构建了一个简化版本 假设我有一个整数流 以及第二个包含这些整数的乘法因子的
  • 如何将UNC转换为本地路径

    我正在寻找一种方法来获取给定 UNC 路径的相应本地路径 微软提供了一个小型库CheckLCL以此目的 并非所有 Windows 版本都支持此库 有人知道这方面的开源方法吗 还有MAPI功能来自UNC的ScLocalPath 但不确定它是否
  • 如果经过身份验证,则允许下载文件

    我在 htaccess 文件中有一个 RewriteRule RewriteRule folder folder handle php path 1 L 用于验证用户身份handle php归档并查看他们是否拥有高级帐户 我想要 1 检查用
  • 为什么 NSString 和 NSLog 处理 %C 和 %lc(以及 %S 和 %ls)的方式不同?

    Apple s 字符串格式说明符文件索赔 NSString 格式化方法和 CFString 格式化函数支持的格式说明符遵循IEEE printf 规范 您还可以将这些格式说明符与 NSLog 函数一起使用 但是 虽然printf规范定义 C
  • 更新推送证书并保持当前 App Store 应用程序正常运行

    我在应用程序商店中有一个应用程序 它使用的 iOS 配置文件 分发 已过期 此配置文件包含也已过期的推送证书 并且不再出现在门户中 问题1 有没有办法重新创建推送证书然后更新配置文件 我的钥匙串上仍然有推送证书 已过期 问题2 我是否需要使
  • 如何用 python 检测 firebase child 的变化?

    我在使用这个应用程序时遇到了一些问题 我需要的是 如果我检测到数据库 FIREBASE 中的更改 特别是 sala 和 ventilacion 节点中的更改 该函数就会执行它必须执行的操作 如果数据库中没有任何更改 它不会执行任何操作 我正
  • git 复制特定版本的存储库

    我是 git 新手 所以如果这是一个愚蠢的问题 请原谅我 我有一个 git 存储库 我需要将存储库的特定修订版复制到其自己的单独目录中 复制的版本本身不需要是 git 存储库 我不需要或想要历史记录或 git 文件夹 只是特定提交的存储库的
  • 从现有表中过滤 SQL DDL 语句的列名称

    是否可以在 psql 中过滤列名本身 我想在一个单独的模式 伪代码 中生成原始表的有限版本 具有数百列 create table why am i doing this select from original table where co
  • 在Python中检测白色背景上的物体

    我正在尝试使用 Python 来检测白色表面上有多少个物体 示例图像位于本文末尾 我想知道应该如何做到这一点 主要是因为背景是白色的 并且大多数时候它被检测为前景 基于本教程 我现在在 Python 中拥有的内容 http pythonvi
  • 在谷歌脚本中将谷歌电子表格转换为xls [重复]

    这个问题在这里已经有答案了 可能的重复 Google Apps 脚本通过电子邮件发送 Google 电子表格 Excel 版本 我到处寻找这个但无法让它工作 我正在发送一封电子邮件 其中包含谷歌应用程序脚本中的附件 该文档是一个谷歌电子表格
  • C 中的 FILE 关键字到底是什么?

    我已经开始学习一些 C 作为一种爱好 并且已经盲目地使用 FILE 作为文件指针的声明相当长一段时间了 我一直在想 这是 C 用来处理文件的关键字或特殊数据类型吗 它是否包含文件内的流和其他数据 为什么定义为指针呢 举一个例子来说明我的意思