Как создать супер-огромный файл с помощью чистого c, linux-shell или dos-команд?
-
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; Для получения дополнительной информации см. здесь . р>