Como criar um arquivo super-huge com Cim-Shell Pure C ou Linux ou DOS-Commands?
-
08-07-2019 - |
Pergunta
Meu sistema operacional e drive é
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
Então, como posso criar um arquivo de super-huge em segundos
Disseram -me para usar funções do MappingFile. Eu não consegui criar arquivos acima de 2G, então ... suas respostas quentes serão todas apreciadas, obrigado
Solução
Usando dd
No Linux, para criar um arquivo de 1 GB, leva 57 segundos de tempo de parede em uma caixa um pouco carregada com um disco lento e cerca de 17 segundos tempo do sistema:
$ 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
$
Outras dicas
Você pode usar DD
dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100
ou apenas script e conteúdo simples de shell não importa
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
Faça outra hora
while true
do
cat bigfile >> bigfile2.txt
# check for size and break out..
done
rm -f dummy bigfile
O arquivo tem que ocupar espaço em disco real? Caso contrário, você sempre pode (em Cygwin ou Linux):
dd if=/dev/zero of=bigfile seek=7T bs=1 count=1
Isso criará um arquivo de 7 TB vazio em uma fração de segundo. Claro, ele não alocará muito espaço em disco real: você terá um grande arquivo esparso.
Escrevendo um programa sob Cygwin ou Linux, você pode fazer a mesma coisa em um programa C com uma chamada para ftruncato.
Dependendo dos limites do seu sistema, você pode criar um grande arquivo em uma fração de segundo ...
FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);
Brinque com isso.
gato /dev /urandom >> /home /mybigfile
Ele será um erro quando o espaço do disco acabar.
Isto é para Linux/BSD/possivelmente CGywin
Em Suse em uma VM eu fiz dd if=/dev/zero of=file;rm file
que preencheu o disco e quando foi excluído o arquivo. Isso me permitiu comprimir a imagem um pouco mais por algum motivo, e eu li sobre fazê -la em um fórum em algum lugar.
Você pode usar o comando "fsutil" para win2000/xp/7:
C:> fsutil Arquivo CreateNew Uso: FSUTIL ARQUIVO CREATENEW EG: FSUTIL ARQUIVO CREATENEW C: TESTFILE.TXT 1000
Reagds
Se você deseja um arquivo esparso, também pode fazer isso no Windows (nos volumes NTFS), usando createfile, Deviceiofunction com FSCTL_SET_SPARSE e FSCTL_SET_ZERO_DATA; Para mais informações, consulte aqui.