我有写入到文件中的短C程序,直到有在磁盘上没有更多的空间:

#include <stdio.h>

int main(void) {
  char c[] = "abcdefghij";
  size_t rez;
  FILE *f = fopen("filldisk.dat", "wb");
  while (1) {
    rez = fwrite(c, 1, sizeof(c), f);
    if (!rez) break;
  }
  fclose(f);
  return 0;
}

当我运行程序(在Linux中),它当文件达到2GB停止。

是否有一个内部的限制,由于文件结构,或什么?

感谢。

有帮助吗?

解决方案

在一个32位系统(即,OS是32位),在默认情况下,的fopen和共同被限制为32位大小/偏移/等...您需要启用大文件支持,或使用* 64位选项:

的http:// WWW。 gnu.org/software/libc/manual/html_node/Opening-Streams.html#index-fopen64-931

那么你的FS需要支持这一点,但除了脂肪和其他原始FS,所有的人都支持创建文件> 2 GB。

其他提示

  

当文件达到2GB其停止。

     

是否有一个内部的限制,因   到文件结构中,或什么?

这是由于libc的(标准C库),默认情况下在86(IA-32)的Linux系统是由glibc的(GNU的C库)提供32位的功能。所以默认情况下,文件流的大小是基于32位 - 2 ^(32-1)

有关使用大文件支持,看到网页。

#define _FILE_OFFSET_BITS  64
/* or more commonly add -D_FILE_OFFSET_BITS=64 to CFLAGS */

#include <stdio.h>

int main(void) {
  char c[] = "abcdefghij";
  size_t rez;
  FILE *f = fopen("filldisk.dat", "wb");
  while (1) {
    rez = fwrite(c, 1, sizeof(c), f);
    if ( rez < sizeof(c) ) { break; }
  }
  fclose(f);
  return 0;
}

注意:大多数系统期望的fopen(和off_t)将基于2 ^ 31文件大小限制。与off64_tfopen64更换他们使这个明确的,和使用情况而定可能是去最好的方式。但一般不建议使用,因为它们是非标准的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top