3

我正在尝试使用 seek 在 c 编程中获取文件大小。我不能使用fseekstat.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);
4

3 回答 3

7

seek? 你的意思是lseek大概。看看手册页。返回什么lseek

于 2011-10-13T16:24:26.193 回答
4

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

lseek()应该直接返回文件偏移量。fseek()以下将为您ftell()提供文件偏移量。

于 2011-10-13T17:29:10.680 回答
1

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

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

lseek()或者像 Luther 建议的那样,检查是否使用 normal的返回值<unistd.h>

于 2011-10-13T17:00:04.107 回答