问题标签 [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 投票
1 回答
446 浏览

c - 写入()到文件描述符在读取()时消失

所以我现在正在我的程序的服务器端工作,我想做以下事情:

1)以读/写模式打开文件

2)在文件末尾附加一个单词(WORD)

3) [我相信我已经完成了所有这部分] 打开一个管道,创建一个子进程,让它直接从文件(文件描述符)中读取,执行一个命令,并将结果发送到管道。父进程从管道的读取/输入中读取,并将信息放入缓冲区以发送回客户端。

我遇到的问题是附加部分。我很确定它会附加到文件中(在现有文本和我的 WORD 之间有一个换行符),因为当我直接打开文本文件时它就在那里。但是当我尝试从缓冲区打印它时,它不存在。我尝试在写入并重新打开后关闭文件描述符,但它不存在。我试过 strcat 而不是写入文件描述符,但它不存在。

我真的有什么误解吗?

也许我不完全理解 open()、read()、write() 和 lseek() 是如何工作的,但是如果有人可以帮助向我解释为什么这不能按预期工作,那将不胜感激。在过去的一周里,我一直在为此苦苦挣扎,而我目前打开的用于寻找解决方案的选项卡数量是可悲的。

0 投票
1 回答
334 浏览

c - unistd.h的`lseek`中的`l`是什么意思?

我在读APUE探索C和Unix的细节,遇到 lseek

我是什么意思,是长度吗?

0 投票
1 回答
604 浏览

java - Java逐行读取文件到特定的查找位置

我想逐行读取文件到指定的查找位置。从某个搜索位置开始阅读并继续阅读直到结束是很容易的。

这将文件读取位置设置为给定的查找并开始读取直到该位置。如何从第一行逐行阅读并停止提前阅读或寻找位置?

0 投票
0 回答
151 浏览

linux - 通过系统调用函数 read () 或通过 glibc 函数 fread() 读取 /proc/stat 文件的区别

通过 read(如 cat)或 fread(如 nl)读取 /proc/stat 文件的程序返回不同的值。read() /proc/stat 返回正确的结果,而 fread() 返回错误的结果。

我编写了简单的 C 程序,它们只读取或读取 /proc/stat。read() 返回正确的值,例如cat /proc/stat. fread() 返回错误的值,例如nl /proc/stat.

我在我的Centos7系统中执行“top”命令,然后按“1”显示每个cpu的详细信息,它只显示cpu0的信息,而我的系统有8个cpu核心。此外,cpu0的信息是错误的。

于是我阅读了top命令的源代码,发现它使用fread()从/proc/stat获取cpu信息。我将文件读取接口从glibc fread()函数更改为read(),它运行良好。

我使用 fread() 来检索 /proc 中的其他文件,例如 /proc/meminfo,它也很好用。

  1. fread() 从 /proc/stat 获取信息(命令 'nl' 使用 fread() 读取文件中的内容)</li>
  1. read() 从 /proc/stat 获取信息(命令 'cat' 使用 read() 读取文件中的内容)</li>
  1. 用户 read() 和 fread() 检索/proc下的其他文件,看起来很正常

  2. 我的带有 read() 的 C 程序

  1. 我的带有 fread() 的 C 程序

作为 aschepler 的顾问,我跟踪我的 C 程序。:

6、read() /proc/stat 的 strace 信息(部分结果):

7、fread() /proc/stat 的 strace 信息(部分结果)

0 投票
1 回答
335 浏览

c - 在 xv6 中实现 lseek

首先,我需要说我完全有可能遗漏了一些东西。我的任务是实质上实现'fprintf'。现在虽然不需要附加到文件,但我喜欢超越。我的问题是,我在 xv6 中找不到 lseek 的定义,这意味着我必须自己实现它,但我真的不知道如何去做。

尝试在无限循环中一次读取 512 个字节,以尝试将光标移到末尾,作为对其进行硬编码的一种方式,但如果文件未使用 O_RDWR 打开或我使用 stdout 尝试此操作,则会失败。

我也试过在无限循环上写一个空字符串。明知道行不通,还是试了一下。

我可以很好地阅读 xv6(用户级程序),但我一生都无法理解 lseek 的源代码

它不一定是真正的 lseek。我只需要能够到达 fd 的末尾并继续写入,但这不能依赖于文件模式。

任何帮助是极大的赞赏。

0 投票
1 回答
186 浏览

c - 有没有办法在 C 文件中找到特殊字符 '\n' 的位置?

我想在文件中找到'\n'的位置并打印出\n之后的剩余字符

我尝试使用 lseek 查找 '\n' 出现的次数,但我似乎无法找到特殊字符 '\n' 出现的位置

我也尝试使用strok来分解特定文件并lseek找到最后一个字符的位置

输入

应该做什么

打印三行

输出

相反,它会打印文件中的字符数并根据 \n 发生的时间对其进行格式化

0 投票
1 回答
436 浏览

file-descriptor - 读取和打印最后 N 个字符

我有一个程序,我想用它来读取文件并输出它的最后 N 个字符(可以是 50 或我编码的任何字符)。从我的一段代码中,我得到的输出是菱形框中的问号,(不支持的 unicode?)

我正在使用 lseek 设置光标,有人可以帮助我吗?

我不想使用<stdio.h>函数,所以我使用文件描述符而不是创建FILE*对象。

0 投票
2 回答
3680 浏览

c - 使用 lseek() 系统调用重置文件位置

我尝试使用系统调用 lseek() 来取回文件的开头或到达文件的结尾。

我使用的确切代码是:

但是,在文件位置被重置后,每当我尝试使用 read() 时,read() 的返回值总是设置为 -1,这意味着有问题。此外,我收到的 errno 消息是错误的文件描述符。有谁知道我该怎么办?

PS:我试图关闭并重新打开文件以帮助我回到文件的开头并且它有效。但是我不知道如何在不使用 lseek() 的情况下到达文件末尾并以相反的顺序读取整个文件。

另外:一个可重复的例子是:

0 投票
1 回答
370 浏览

file - mmap 文件不同步

您好,我正在尝试通过 mmap 备份矢量。但是,我尝试过 msync 然后 munmap 但它不起作用。在我写入 (char *) 然后 munmap 文件后,该文件没有内容。mmap 文件也是使用标志 MAP_SHARED 创建的。如果有人可以提供帮助,我将不胜感激。

0 投票
1 回答
44 浏览

c - 将字符串存储在二进制文件中而不被覆盖

所以首先,这是我的代码的相关部分,然后我将继续解释。

我将 str 重新定义为“alpha one”的原因是,即使我试图在 scanf 后使用 fflush 清除缓冲区,fgets 仍然会得到一个“/n”作为输入(我假设)并且当我打印“name”时我得到空白。即使这不是主要问题,任何对此的帮助都是有价值的。

这一切都在一个循环中,所以我想如果我在提示时继续按“1”,我的二进制文件应该如下所示: alpha onealpha one alpha one ...

但是,它看起来像:alpha one,无论我按多少次 1。

与存储计数器的其他二进制文件相同,它会正确更新,因此在第一个循环之后它存储了“9”,但在我期望的第二个循环之后只有“18”:9 18

我尝试完全删除 lseek,并将其设置为 CURR 而不是 END。结果相同。我打开了最大警告,编译时没有收到任何警告。

我应该指出这是家庭作业,所以我不能使用 fopen 等,只能使用系统命令。

这是 updateCounter 函数,以防有人想要运行它:

谢谢你的帮助。