Wie erstelle ich eine Super-Huge-Datei mit reinem C oder Linux-Shell oder Dos-Commands?

StackOverflow https://stackoverflow.com/questions/1817716

  •  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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top