【问题标题】:address of opened file打开文件的地址
【发布时间】:2022-01-16 10:53:04
【问题描述】:

我想知道打开函数打开文件的地址:

int fd = open("file" , O_RONLY);

现在我们有了这个打开文件的 fd,如果我们需要从中读取,我们只需输入:

read(fd, buffer, size);

示例:

file : | H | E | L | L | O |  | W | O | R | L | D |

如果我们从该文件中读取 3 个字符:

  1. int fd = open("file" , O_RONLY);
  2. read(fd, buffer, 3);

光标现在在这里:| H | E | {L} |大号 | ○ | | W | ○ |右 |大号 | D |

问题:那么,我怎样才能得到这个{L} char 的地址,或者第一个char 的地址{H}?我想知道这个打开文件的地址而不使用“FILE F = fopen”*

【问题讨论】:

  • “地址”是什么意思?文件读取偏移量?如果是这样,请查看lseek
  • 一个文件没有地址,所以不太清楚你的意思。
  • 我认为您正在对文件的工作方式做出假设 - 而您不应该这样做。这就是文件操作函数的用途。无论您尝试通过该指针做什么,您都需要找到一种通过库中定义的函数来完成它的方法。
  • 如果您从文件中读取了 3 个字节,则文件指针现在将位于 second L,而不是第一个。
  • 某些文件数据可能根本不在内存中,除非您调用库函数来访问它。所以没有这些字符的地址。

标签: c file file-descriptor


【解决方案1】:

我想知道这个打开的文件的地址而不使用“FILE F = fopen”

没有这样的事情。该文件存在于磁盘上的某个位置,但在您打开并从中读取一些数据之前,它在内存中没有地址。

您所做的是将文件的内容read 放入您提供的某个缓冲区。该缓冲区有一个地址。该缓冲区中第三个字符的地址是buffer+2

【讨论】:

  • 但是如果你打开一个文件,这个洞文件会加载到 RAM 中,并从中读取/写入。所以如果我想保存第一个地址,我该怎么办?谢谢^^
  • @alpha 你在这里有一个完全错误的想法。打开文件不会将其加载到内存中。
  • 是的,先生,我错了,我想知道,如何在读取文件后返回文件中的第一个字符,而不使用 lseek 函数
  • @alpha 请阅读xyproblem.info,然后接受这个答案并提出你的真实问题。
  • @alpha 我不知道你为什么不想使用lseek,但它是 方式——only 方式— 在文件中四处寻找。如果这是您需要做的工作,为什么不使用它来完成它的工作?
【解决方案2】:

我认为您正在对文件的工作方式做出假设 - 而您不应该这样做。这就是文件操作函数的用途。无论您尝试通过该指针做什么,您都需要通过库中定义的函数找到一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2018-03-29
    • 2020-09-25
    • 1970-01-01
    • 2012-03-06
    相关资源
    最近更新 更多