¿Cómo crear un archivo súper enorme con c o linux-shell o dos-comandos puros?
-
08-07-2019 - |
Pregunta
Mi sistema operativo y mi unidad son
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
Entonces, ¿cómo puedo crear un archivo supergrande en segundos?
Me dijeron que usara las funciones de MappingFile. No pude crear archivos de más de 2G Asi que... Sus cálidas respuestas serán apreciadas gracias
Solución
Usar dd
en Linux para crear un archivo de 1 gb toma 57 segundos de "tiempo de reloj de pared" en una caja algo cargada con un disco lento, y aproximadamente 17 segundos de tiempo del 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
$
Otros consejos
puedes usar dd
dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100
o simplemente las secuencias de comandos de shell y el contenido no importan
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
Haz otra vez
while true
do
cat bigfile >> bigfile2.txt
# check for size and break out..
done
rm -f dummy bigfile
¿El archivo tiene que ocupar espacio en disco real? Si no, siempre podría (en Cygwin o Linux):
dd if=/dev/zero of=bigfile seek=7T bs=1 count=1
Esto creará un archivo vacío de 7 TB en una fracción de segundo. Por supuesto, no asignará mucho espacio en disco real: tendrá un gran archivo disperso .
Al escribir un programa en Cygwin o Linux, puede hacer lo mismo en un programa C con una llamada a ftruncate .
Dependiendo de los límites de su sistema, puede crear un archivo grande en una fracción 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);
Juega con esto.
cat / dev / urandom > > / home / mybigfile
Se producirá un error cuando se agote el espacio en disco.
Esto es para linux / bsd / posiblemente cgywin
En el caso de una máquina virtual, hice dd if = / dev / zero of = file; rm file
que llenó el disco, y cuando estaba lleno borré el archivo. Esto me permitió comprimir la imagen un poco más por alguna razón, y leí sobre hacerlo en un foro en algún lugar.
Puede usar " fsutil " comando para Win2000 / XP / 7:
c: > Archivo fsutil createnew Uso: archivo fsutil createnew Por ejemplo: archivo fsutil createnew C: \ testfile.txt 1000
Reagrds
Si desea un archivo disperso, puede hacerlo también en Windows (en volúmenes NTFS), utilizando CreateFile, DeviceIOFunction con FSCTL_SET_SPARSE y FSCTL_SET_ZERO_DATA; Para obtener más información, consulte aquí .