- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
虽然我知道 fpos_t
是一种不透明类型,旨在由 fgetpos()
函数初始化,C99 rationale 的 §7.19.9.1|指出:
fgetpos
andfsetpos
were added to C89 to allow random access operations on files that are too large to handle withfseek
andftell
.
和§7.19.9.2:
The need to encode both record position and position within a record in a
long
value may constrain the size of text files upon whichfseek
andftell
can be used to be considerably smaller than the size of binary files....
fgetpos
andfsetpos
were added to deal with files that are too large to handle withfseek
andftell
.
这似乎主要关注文本文件(使用 mode
打开的文件,不包括 b
标志),因为某些实现可能需要存储两个位置(一个文件记录位置和记录字符位置),这会显着减少文本流的 fseek()
和 ftell()
函数的有效范围。
不过,我对这对文本流有何特别有用一无所知,而且我当然不明白它如何有效地用于“随机访问”。
实际使用这些函数的唯一方法似乎是读取文件的每个字符并缓存它们的 fgetpos()
d fpos_t
值,这似乎充其量是小众的,因为您几乎肯定不想阅读 LONG_MAX
个字符附近的任何地方。
“委员会”在想什么?有没有C99 rationale 的理由?
最佳答案
我相信在某些(可能是 archaic 大型机)系统上,文本文件存储为一系列“记录”(行),因此文件位置由记录索引和内部位置组成记录,这就是基本原理文本似乎指的是什么。在操作系统级别,查找操作需要记录索引和记录中的位置,而不是文件中的字节位置;这导致了一个问题,即记录索引和位置都必须在 long
值中编码,以便与 fseek
和 ftell
一起使用。因此,库实现需要为每个记录索引和位置分配一些位数,这限制了记录的数量和位置。
例如,如果 long
有 32 位,那么它可能被分成 25 位用于记录索引和 7 位用于记录中的位置(允许最大可用记录长度为 127,和 2^25 ~= 33k 条记录)。然而,系统可能允许比这更多更大的记录。
(以上说法一部分是模糊的记忆,一部分是从理据文中推断的)。
然而,即使在现代桌面系统上,fseek
和 ftell
的真正问题在于 long
值可能不足以表示全方位的文件位置。在 32 位系统上,long
通常是 32 位,但文件通常仍然可以增长到大于 2GB。因此需要一种不同的机制来指定文件偏移量。
I certainly don't understand how it could effectively be used for "random access."
在这种情况下,通过“随机访问”,他们所说的是能够寻找到任何已经访问过的点的能力,也就是说,您可以重新定位(使用fsetpos
)任何已经访问过的位置你已经获得了(通过fgetpos
)。它与寻找任意字节位置无关。可以说“随机访问”是错误的术语,但我认为他们只是想与纯粹的顺序访问区分开来。
关于c - `fsetpos()`如何用于 "allow random access on files that are too large to handle with ` fseek( )`?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331101/
我正在 Angular js和sails.js(node.js框架)之间的cors问题上挣扎 我尝试修复错误:XMLHttpRequest无法加载http://localhost:1337/en/au
我在我的应用程序中动态创建一个 iframe,结果如下所示: 这样的沙箱配置是否安全(特别是允许将 iframe 内容视为来自同一来源)? 最佳答案 正如 Namey 评论的那样,allow-sam
突然,似乎没有更改我的网络应用程序中的任何内容,我在 Chrome 中打开它时开始收到 CORS 错误。我尝试添加 Access-Control-Allow-Origin: *标题。然后我得到这个错误
我正在使用 Ionic Framework 开发应用程序。 在后端,我为 api 编写了一个 Flask 应用程序,如下所示: @API.route("/saverez",methods=["POST
我正在尝试从 onesignal api 发送 POST 请求 代码 axios({ method: 'post', url: 'https://onesignal.com/api/v1/no
我一直在寻找一些类似的问题来寻找答案,但我找不到。我有一个带有 express 的 node.js 服务器: app.use(function(req, res, next) { res.head
我使用 Google Cloud Functions 创建了一个 API 端点,并试图从 JS 获取函数中调用它。 我遇到了我很确定与 CORS 或输出格式有关的错误,但我不确定发生了什么。其他一些
当我尝试从我的 Angular 6 应用程序访问 Webhdfs 时,我收到如下所示的错误。在我看来,我几乎尝试了所有方法,包括更改 core-site.xml 和 hdfs-site.xml 中的设
我刚刚学习 ajax 和 cors 一些东西,现在我想知道 chrome 插件“allow-control-allow-origin”是如何工作的。 当我尝试执行正常的 ajax 请求时,控制台显示错
我正在努力理解如何允许用户在列表中创建新记录,但只允许创建者更新他们自己的帖子。 例如。以下结构: post { post1: { author: "user1"
我们的网络上有 2 个内部(内联网)Windows 服务器,仅适用于本地网络。在 server1 上安装了 Spark,我们可以在其中查询 Jabber 信息,如下所示: http://server1
所以在 routing.yml 中我定义了以下路由,以便编辑和删除特定设置: 路由.yml: settings.editDefaults: path: settings/{id}/d
我哪里出错了 title $.get("http://api.angel.co/1/tags/1654/startups?callback=aaa", function(data
首先,对您可能犯的语法错误表示歉意。我的英语不是很好。 我是 Spring 新手,我正在尝试创建基本身份验证安全性。 我正在尝试配置一个端点具有公共(public)访问权限,而其他端点则具有用户访问权
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: NULL in MySQL (Performance & Storage) 如果出现以下情况,您是否强烈建议取消选中
我正在尝试将我的一个网站中的内容加载到另一个网站中: $('#include-from-outside').load('http://lujanventas.com/plugins/banne
这里出了什么问题? OPTIONS https://twitter.com/oauth/request_token 401 (Unauthorized) jsOAuth-1.3.4.js:483 XM
allow-control-allow-origin : * header 存在于 API 响应中,但浏览器仍显示错误。网络 403 错误。 这是来自 API 的示例响应 header : Acces
在 Go 中制作 slice 时的 capacity 参数对我来说意义不大。例如, aSlice := make([]int, 2, 2) //a new slice with length and
Gitlab 保护分支中“允许推送”和“允许 merge ”是什么意思 最佳答案 引用 Gitlab Documentation here Using the "Allowed to push" an
我是一名优秀的程序员,十分优秀!