Как создать супер-огромный файл с чистыми командами c или linux-shell или dos-командами? - PullRequest
3 голосов
/ 30 ноября 2009

Мой ОС и диск

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 Так... Ваши теплые отзывы будут оценены по достоинству спасибо

Ответы [ 8 ]

10 голосов
/ 30 ноября 2009

Использование 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
$
4 голосов
/ 30 ноября 2009

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

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
2 голосов
/ 30 ноября 2009

cat / dev / urandom >> / home / mybigfile

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

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

2 голосов
/ 30 ноября 2009

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

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

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

2 голосов
/ 30 ноября 2009

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

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

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

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

1 голос
/ 23 июня 2010

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

c:> fsutil file createnew Использование: fsutil файл createnew Например: файл fsutil createnew C: \ testfile.txt 1000

Reagrds

1 голос
/ 30 ноября 2009

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

0 голосов
/ 30 ноября 2009

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

...