问题标签 [lseek]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
277 浏览

c - 使用 C 中的 lseek 命令在文件中查找字符串

我有一个按以下顺序存储学生数据的文件:

id(空格) name(空格)address

以下是该文件的内容:

每个数据都存储在换行符中。

我想用id10 搜索学生并使用命令显示他/她的详细信息lseek,但我不会完成任务。任何帮助表示赞赏。

0 投票
1 回答
130 浏览

c - fopen() 返回 NULL 但 open() 系统调用返回正确的文件描述符?

我一直在尝试在 Ubuntu 20.04LTS 上运行这个非常简单的 C 代码

但无论我到目前为止尝试了什么 fopen 仍然返回这个错误:

我假设的第一件事是程序没有打开文件的权限,但权限设置正确:

接下来我尝试将文件的位置更改为 /home 或指定完整路径而不是文件名;还是一样的结果

现在是我无法理解的部分,在 Strace 下运行脚本时,它似乎工作正常,至少现在

openat() 调用返回一个小的正整数,这是我目前阅读的正常行为

最后,真正让我大吃一惊的是,上面 Strace 的输出与我几分钟前收到的输出不同。出于某种原因,我似乎无法重新创建该输出,但它的要点是:

-openat() 返回 3

- lseek(fd, -9, SEEK_CUR)被调用并返回-1 ESPIPE 非法搜索请原谅我的语法,我是凭记忆写的。另外为什么偏移量是负整数?这正常吗?

为什么 lseek() 前几次被调用,但不是现在?

在这里阅读 lseek 上的 man它说

在 Linux 上,在终端设备上使用 lseek() 失败并出现错误 ESPIPE。

还有错误描述符

ESPIPE fd 与管道、套接字或 FIFO 相关联。

我相信第一个引用是不相关的,网上有很多线程,人们设法在 linux 上使用 fopen()。当涉及到错误描述符时,它超出了我的理解水平。

错误案例截图

渲染器1.log:

这就是我能想到的,显然它还不够好。

任何和所有的帮助表示赞赏。

0 投票
1 回答
51 浏览

c - lseek 的意外行为

lseek只是用来查找文件的大小并lseek返回比文件的实际大小更少的字节。我认为代码是正确的,我无法解释为什么会发生这种情况。

当我第一次运行该程序时,它运行良好。然后我在文件中添加了一些数据,所以它改变了它的大小。从那以后,当我用新文件再次运行程序时,结果总是旧文件的大小。

任何帮助表示赞赏!

0 投票
2 回答
258 浏览

c - 如何逐字节复制c中的文件

好的,所以我正在学习 C 并且在一本教科书中有一个练习留给读者,这本书解释了一个文件(或至少是一个常规文件)只是一个字节数组。据我了解,在 linux 中,每个块都是 512 字节,但是当您将文件读入文件描述符时,程序会自动加载整个文件,这可能是正确的吗?这本书介绍了 Linux 系统调用read, write, and lseek(一些基本的低级调用)。

现在的目标就像我说的将文件逐字节复制到一些随机的新文件中。伪代码将是完全可以接受的。无论如何,我的理解是您需要

我的理解是构建会是这样的:

至少在现阶段对我来说,这确实是一个相当复杂的问题。我的想法是将文件的全部内容读入文件描述符,然后使用管道逐字节写入新文件,将前一个文件的全部内容复制到新文件中。我也不确定 lseek 在这种情况下如何帮助我们。或者我是否过于复杂化并且方向完全错误?

0 投票
0 回答
28 浏览

c++ - 在下面的示例代码中,我希望使用 _lseek(fh, 0L, SEEK_END) 获取文件中的字符数。但它返回零

我尝试在以下结构(struct_iobuf)中获取 cnt、ptr、flag 和 base 的替代功能

  • cnt = 使用 lseek 获取文件中的字符数
  • flag= 使用了 iostream 标志

对于 ptr 和 base,任何指导都会有所帮助。

输出: