【问题标题】:how to seek to the end of file to determine the file size?如何寻找到文件末尾来确定文件大小?
【发布时间】:2011-10-13 16:19:02
【问题描述】:

我正在尝试使用 seek 在 c 编程中获取文件大小。我不能使用fseek、stat.size 或ftell,我需要在其中运行一个自定义操作系统 UNIX。

如何仅使用 seek 找出文件大小?可能吗?

  FILE *fd = open(argv[1], "r");

  if(fd == NULL)
  {
    printf("Not able to open the file : %s\n", argv[1]);
    return;
  }

  // Set the pointer to the end
  seek(fd, 0, SEEK_END);

【问题讨论】:

  • 为什么不能使用 fseek、stat.size 或 ftell?你可以使用 getch() 吗?这是我能想到的唯一方法。
  • 你说的seek函数是什么?
  • 我的操作系统类中有一个定制的操作系统。它只有特定的打开、读取、写入功能。没有 fopen,ftell 存在。所以有点麻烦。

标签: c filesize seek


【解决方案1】:

seek?你的意思可能是lseek。看看manual pagelseek 返回什么?

【讨论】:

    【解决方案2】:

    如果您只是想知道使用 offset = 0whence = SEEK_END 的构造是否会将文件偏移量定位到文件末尾,那么“是”你是对的,至少对于“标准 f/lseek()”s我遇到了。

    lseek() 应该直接返回文件偏移量。 对于fseek(),下面的ftell() 将为您提供文件偏移量。

    【讨论】:

      【解决方案3】:

      通常,open() 返回一个 int,而不是 FILE *。您必须检查返回值 >= 0。来自<stdio.h>fopen() 返回FILE *。此外,作为记录,fopen()fseek() 是 C 标准库的一部分。 UNIX open() 是 POSIX 的一部分。所以总的来说,fopen()/fseek() 更便携。

      如果你真的在一个自定义的“类 Unix”环境中,那不再是真的(即你有一个自定义 API 而不是 unistd.h ),那么如果不提供,你就不会在这里得到一个好的答案更多信息。你能告诉我们你真正运行的是什么操作系统吗?

      或者像 Luther 建议的那样,如果您使用的是普通的 <unistd.h>,请检查 lseek() 的返回值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多