Как создать супер-огромный файл с помощью чистого c, linux-shell или dos-команд?

StackOverflow https://stackoverflow.com/questions/1817716

  •  08-07-2019
  •  | 
  •  

Вопрос

Моя операционная система и дисковод

OS: Windows XP sp2 or Linux SUSE 9 or Cygwin
Compiler: Visual C++ 2003 or Gcc or Cygwin
PC and os are both 32 bits

Итак, как я могу создать сверхгабаритный файл за считанные секунды

Мне сказали использовать функции MappingFile.Мне не удалось создать файлы через 2G Итак...Мы будем признательны за ваши теплые отзывы спасибо

Это было полезно?

Решение

Использование dd в Linux для создания файла объемом 1 Гб занимает 57 секунд «времени настенных часов» на несколько загруженном ящике с медленным диском и около 17 секунд системного времени:

$ time dd if=/dev/zero of=bigfile bs=G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 53.9903 s, 19.9 MB/s

real    0m56.685s
user    0m0.008s
sys     0m17.113s
$

Другие советы

вы можете использовать дд

dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100

или просто сценарии оболочки и содержимое не имеет значения

1) create a dummy file with a few lines, eg 10 lines
2) use cat dummy >> bigfile in a while loop

eg

    while true
    do
      cat dummy >> bigfile.txt 
      #check for number of lines more than 10000 for example and break out of loop
    done

Делай в другой раз

while true
do
  cat bigfile >> bigfile2.txt           
  # check for size and break out..
done
rm -f dummy bigfile

Должен ли файл занимать фактическое дисковое пространство? Если нет, вы всегда можете (в Cygwin или Linux):

dd if=/dev/zero of=bigfile seek=7T bs=1 count=1

Это создаст пустой файл размером 7 ТБ за долю секунды. Конечно, он не выделит много фактического дискового пространства: у вас будет большой разреженный файл .

При написании программы на Cygwin или Linux вы можете сделать то же самое в программе на C, вызвав ftruncate .

В зависимости от системных ограничений вы можете создать крупный файл за доли секунды ...

FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
    fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);

Поиграй с этим.

cat / dev / urandom > > / Главная / mybigfile

Произойдет ошибка, когда закончится место на диске.

Это для linux / bsd / возможно cgywin

В suse на виртуальной машине я сделал dd if = / dev / zero of = file; rm file , который заполнил диск, и когда он был заполнен, удалил файл. Это позволило мне по какой-то причине немного сжать изображение, и я читал об этом где-то на форуме.

Вы можете использовать команду "fsutil" для Win2000 / XP / 7:

c:> fsutil создание файла заново Использование :файл fsutil создается заново Например :создание нового файла fsutil C: estfile.txt 1000

Реагенты

Если вам нужен разреженный файл, вы можете сделать это также в Windows (на томах NTFS), используя CreateFile, DeviceIOFunction с FSCTL_SET_SPARSE и FSCTL_SET_ZERO_DATA; Для получения дополнительной информации см. здесь . р>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top