问题标签 [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.
c++ - 当 pread 接受偏移值时,为什么我们需要 lseek?
我很难理解为什么lseek
函数有用。假设我从用户那里得到了这样的参数:
我想从偏移量中读取 100 个字节。我可以pread
这样使用:
另一方面,我知道我可以lseek
这样设置文件:
所以我相信我pread
已经实现了阅读。我错过lseek
了什么可以帮助我阅读文件?
c - Lseek SEEK_END 不起作用?
我正在开发一个带有操纵杆的 C 程序,我想获得最后一个事件,它是 js0 文件的最后一行。我试图将光标移动到最后一个元素之前,但它似乎不起作用。知道为什么吗?
我确定我正在阅读的文件至少是 (sizeof(e)) 长。Lseek 返回 -1 所以我得到了 errno 并且是 29 - 非法搜索:为什么这应该是非法搜索?即使我使用 0 作为偏移量,我也会得到相同的结果
我正在使用最新版本的 Ubuntu,感谢您的帮助
c++ - C 和 C++ 之间的区别 ( lseek() )
我正在尝试重新设计我以前从事过的项目的 API,它是用 C 编写的,它可以在用 C++ 语言编写的应用程序中使用。
我在 C 语言lseek()
中用于追逐表格、页面等。我的问题是,lseek()
在 C++ 中仍然可以按照我使用它的方式使用它,如下面的示例代码:
多谢
c - fseek 性能比 NFS 下降
我是一个分析电生理数据的 Matlab 用户。最近我发现如果相对偏移量(从当前位置到新位置的字节距离)大于 10^5 或 10^6 左右,则通过 NFS 共享文件进行 fseek 会很慢。
我用 C 检查了这个,似乎 fseek 很慢,而 lseek 不是。有什么好方法可以提高 NFS 上的 fseek 速度吗?将文件复制到本地驱动器不是一种选择,因为我正在处理实时数据。
当相对偏移量小于此值时,fseek 速度约为 10^-7 秒。当相对偏移量大于此值时,fseek 速度约为 10^-4 秒。无论偏移量大小如何,lseek 速度都是 10^-7 阶。我使用的是 CentOS6,用 Matlab 和 Eclipse 测试过。
欢迎任何建议。
下面是我的测试代码。由于 fseek 在内部将 SEEK_CUR 转换为 SEEK_SET,因此我在 SEEK_CUR 合适时使用 SEEK_SET。
附加信息:(部分IP地址改为xx或yy)
nfstat -m 的结果:
mount -v 的结果:
c - lseek() 尝试使用字节文件,但指针是 FILE 类型
这是一个让每个人都意识到的项目。这是我在 C 语言中的第一个项目,并且有关于lseek()
和移动文件指针的问题。
现在我可以读取位图文件的位图和 DIB 标头。我现在需要遍历像素并以某些方式操作它们。我已经用伪代码写出了我打算如何处理这种操作。但是我很难理解如何正确使用lseek
,因为我的代码不断收到incompatible pointer to integer conversion...
警告。我将给出我的主要方法的一个简短示例,因为这是一个项目:
同样,不要试图提供太多我的代码,因为这是一个项目。但我想帮助了解如何正确使用lseek
。我注意到它返回了一个int
值,所以我知道这是因为我的文件指针是FILE
. 但是使用这种方法的正确方法是什么?我看到了一个例子,它在读写模式下打开了同一个文件,其中写入模式使用lseek
. 但由于某种原因,我不知道这是否正确。
已编辑 基于两个成员的响应,我将上面的代码更改为:
除了与 C 相关的一切,我没有得到什么?
c - lseek 尾文件的替代方法(Posix)
我必须实现tail
(posix 系统调用)的一个版本。我是用lseek
和做的pread
。(我到达我的文件的末尾,然后我搜索正确的偏移位置,然后用 pread 从这个位置读取,并写入 stdout 直到文件末尾)。但是现在,我必须在没有 lseek 的情况下实现另一个版本的 tail。问题如下:
“如果文件不支持对lseek
.
我不明白我们怎么能没有lseek
...
如果您有想法,我将非常感激:)
非常感谢你 !
c - 在 c 中用作记录程序数据的内存映射文件
我正在尝试使用内存映射文件记录我的程序的活动。该文件创建得很好,我也无法写入它,但是我遇到了两个问题:
- 当我重新运行程序时,文件要么重置要么写在上面
- 我在上面打印的字符串没有写在它的整体中。
这是我创建文件的地方:
这是我写给它的一个例子:
只有这 2 个sprintfs
日志文件会导致:
c - 为什么 lseek 使用偏移量 `-2` 而不是 `-1` 来反向读取?
为什么是-2
而不是-1
?这是代码的一部分,它必须将一个字符串从一个文件反向写入另一个文件。你能帮我理解为什么它是-2
而不是-1
吗?
unix - 如果父进程和子进程附加到同一个文件,lseek() 和 write() 是否需要是原子的?
问题陈述
一个进程打开一个文件进行追加(假设没有 O_APPEND,这里追加意味着先到lseek()
文件末尾然后write()
),然后分叉一个子进程。两个相关进程同时附加到文件中。假设lseek()
和write()
都是原子的。举一个例子来讨论在这个场景中拥有lseek()
和write()
成为一个原子操作的必要性。
我的想法
- 当前文件偏移量存储在打开文件表中的条目中,并且该条目由 2 个依赖进程共享。
write()
将偏移量更新到刚刚写入的数据的末尾。
这两点保证即使在下面的场景下, 写入的数据P2
也不会被P1
.
我的问题
那么,在这种特定情况下,是否lseek()
仍然write()
需要成为一个原子操作?