Wie erstelle ich eine Super-Huge-Datei mit reinem C oder Linux-Shell oder Dos-Commands?
-
08-07-2019 - |
Frage
Mein Betriebssystem und Laufwerk ist
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
Wie kann ich also eine Super-Huge-Datei in SECS erstellen?
Mir wurde gesagt, ich solle Mapping -Dateifunktionen verwenden. Ich habe es nicht geschafft, Dateien über 2G zu erstellen, also ... Ihre warmen Antworten werden alle geschätzt sein, danke
Lösung
Verwendung dd
In Linux dauert das Erstellen einer 1 -GB -Datei 57 Sekunden 'Wanduhrzeit' auf einer etwas geladenen Box mit einer langsamen Festplatte und einer Systemzeit von etwa 17 Sekunden:
$ 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
$
Andere Tipps
Sie können DD verwenden
dd if=/dev/zero of=bigfile.txt bs=$((1024*1024)) count=100
Oder einfach nur Schalen -Skripte und Inhalt spielt keine Rolle
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
Machen Sie ein anderes Mal
while true
do
cat bigfile >> bigfile2.txt
# check for size and break out..
done
rm -f dummy bigfile
Muss die Datei den tatsächlichen Speicherplatz einnehmen? Wenn nicht, könnten Sie immer (in Cygwin oder Linux):
dd if=/dev/zero of=bigfile seek=7T bs=1 count=1
Dadurch wird eine leere 7 TB -Datei in einem Bruchteil einer Sekunde erstellt. Natürlich wird es nicht viel tatsächlichen Speicherplatz bereitstellen: Sie werden einen großen haben spärliche Datei.
Wenn Sie ein Programm unter Cygwin oder Linux schreiben, können Sie dasselbe in einem C -Programm mit einem Anruf an tun ftruncate.
Abhängig von Ihren Systemgrenzen können Sie eine große Datei in einem Bruchteil einer Sekunde erstellen ...
FILE *fp = fopen("largefile" ,"w");
for(int i = 0; i < 102400; i++)
{
fseek(fp, 10240000, SEEK_CUR);
}
fprintf(fp, "%c", 'x');
fclose(fp);
Spiele damit.
Cat /dev /urandom >> /home /mybigfile
Es wird fehlerhaft sein, wenn der Disc -Speicherplatz ausgegangen ist.
Dies ist für Linux/BSD/möglicherweise cgywin
In Suse in einem VM habe ich getan dd if=/dev/zero of=file;rm file
Das füllte die Festplatte und als sie voll gelöscht wurde, löschte die Datei. Dies ermöglichte es mir, das Bild aus irgendeinem Grund etwas mehr zu komprimieren, und ich las darüber, es irgendwo in einem Forum zu tun.
Sie können den Befehl "fsutil" für Win2000/XP/7 verwenden:
C:> fsutil Datei createNew Nutzung: FSUTIL Datei createNew z.
Reegrds
Wenn Sie eine spärliche Datei wünschen, können Sie dies auch unter Windows (auf NTFS -Volumes) unter Verwendung createFile, DeviceIoFunction mit FSCTL_SET_SPARSE und FSCTL_SET_ZERO_DATA; Weitere Informationen finden Sie unter hier.