(Öffne einfach 50 Tabs in Google Chrome: D (nur ein Scherz, nein, das kannst du nicht))
Kürzester Code für unendliche Festplatten-E / A in einer beliebigen Sprache, C # -Beispiel:
using System.IO;
namespace FileApp {
static class Program {
public static void Main() {
do {
File.WriteAllText("a", "a");
File.Delete("a");
} while (true);
}
}
}
Sie können jedoch nicht einfach die gesamte Festplatte füllen, da diese am Ende stehen bleiben und endlich sein würde.
Und man kann nicht nur lesen, es muss unendlich viel geschrieben werden. (Es muss meine SSD nach genügend Laufzeit töten.)
Los geht's! :)
/dev/null
? (Istyes>/dev/null
eine gültige Bash-Antwort?)Antworten:
DOS / Batch: 4 Bytes
Diese Batch-Datei ruft sich selbst auf (
%0
) und leitet>
die Ausgabe in eine aufgerufene Datei um ( )x
. Da das Echo standardmäßig aktiviert ist, werden der Pfad und der Befehl ausgegeben.quelle
>
wird es überschrieben.>>
würde anhängenPowerShell v2 +, 10 Byte
Schleifen Sie einfach unendlich mit einer leeren
for
Schleife. Bei jeder Iteration geben wir die Ganzzahl1
(implizit in eine Zeichenfolge konvertiert) mit dem>
Umleitungsoperator aus , der die1
im lokalen Verzeichnis angegebene Datei überschreibt .quelle
Winload.exe
ist ausreichend ...1
muss eine Art Zahl sein, damit das implizite Parsen ordnungsgemäß funktioniert. Alles von[0-9]
würde genauso funktionieren.1
mit etwas nicht-numerischen (und nicht angegeben , entweder als.\a
odera.txt
oder dergleichen) führt zu einem Parse - Fehler.Pyth, 6 Bytes
Pyths einziger Dateiausgabebefehl ist
.w
. Beim Aufrufen einer Zeichenfolge wird diese Zeichenfolge im Anhänge-Modus in eine Datei geschrieben, was für den Zweck dieser Frage nicht geeignet ist. Wenn es in einem 2D-Array aufgerufen wird, schreibt es das entsprechende Bild in diese Datei und überschreibt den Dateiinhalt. Genau das macht dieses Programm. Der Standardname für die Dateiausgabe isto.png
, sodass dieses Programm die Datei unendlicho.png
mit einem 1-Pixel-Weißbild überschreibt .#
ist eine Endlosschleife.quelle
Wenn Sie eine kürzere (aber langweiligere als meine andere) Antwort wünschen:
Bash, 5 Bytes
Ich könnte das kürzer machen, wenn es einen Befehl gibt (weniger als 3 Bytes lang), der etwas auf Disk I / O schreibt. Sowas
sync
würde funktionieren, ist abersync
4 Bytes 😛Hinweis: Dies funktioniert nicht, wenn Sie direkt von Bash ausgeführt werden, sondern nur, wenn Sie ein Skript einfügen und es als Skriptname ausführen. (ie
echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb
)quelle
exec
(oder. $0
). Ich denke, dies wird keine PIDs mehr haben.w
hier gebraucht? Für mich wird einfach>w
eine leere Datei erstelltw
, und wenn Sie dies in einer Schleife tun, wird eine unendliche Anzahl von E / A-Vorgängen erstellt, da die mtime-Metadaten ständig aktualisiert werden müssen.Ruby,
22 bis20 BytesSchneidet wiederholt ab und schreibt ein
1
in die Dateia
.Danke an Ventero für 2 Bytes!
quelle
open(?a,?w)<<1
um 2 Bytes zu sparen.cmd, 14 bytes
Überschreibt die Datei unbegrenzt
1
mit der Zeichenfolge in das aktuelle VerzeichnisIch bin neu hier: Werden Windows New Lines (
CR
LF
) als zwei Bytes gezählt?quelle
LF
. Das obige funktioniert für mich nurLF
mit Windows 8.1, sodass Ihre 14 Bytes korrekt sind.CR
LF
2CR
1LF
1Bash + Coreutils, 10
Schreibt einen kontinuierlichen Stream von
>b
, dersh
zur Auswertung weitergeleitet wird.>b
Kürzt einfach eine aufgerufene Dateib
jedes Mal auf null Byte.quelle
b
nichtc
?Perl 5,
273222 BytesWenn das Ändern des Änderungszeitstempels einer Datei ausreicht ...
Schnelle Erklärung:
Vorherige Lösung (32 Bytes):
{{open my$h,'>o';print$h 1}redo}
Bearbeiten:
{open F,'O';print F 1;redo}
← Code vor dem Posten nicht getestet; jetzt musste ich es korrigieren.quelle
$
!PHP,
60 30 17 1615 BytesNochmals aktualisiert, wie von @manatwork vorgeschlagen:
Auch jetzt getestet.
Ein bisschen schummeln 22 Bytes:
while (exec ('> 1 dir'));Vorheriger Vorschlag von @manatwork 30 Bytes:
while (file_put_contents (1,1));NICHT GETESTET (auf diesem Computer ist kein PHP verfügbar) 43 bytes:
für ($ a = fopen (1, 'w'); fputs ($ a, 1); fclose ($ a))Ein Golf Original 45 Bytes:
$ a = fopen (1, 'w'); while (fputs ($ a, 1)) Rücklauf ($ a);Mein erster Beitrag hier ist beigetreten, weil ich dies nur ausprobieren musste: Solange das Schreiben der Datei erfolgreich ist, spulen Sie den Dateizeiger zurück, um zu beginnen.
Kann einfach nicht kleiner als die file_put_contents () werden.quelle
while(file_put_contents(1,1));
sollte genug sein. Beachten Sie, dass das Ausführen vollständiger Skripte von der Befehlszeile ausphp -r '…'
nach Konsens auf Meta- Ebene-r
zulässig ist. Ausführen von PHP mit anstelle von Code-Tags .sh, 11 Bytes
Speichern Sie dies in einer Datei ohne Sonderzeichen wie loop.sh, machen Sie sie ausführbar und führen Sie sie mit
./loop.sh
oder ähnlichem aus.Dadurch wird die Ausgabe des Befehls
w
in die Datei geschriebenw
und der vorherige Wert jedes Mal überschrieben. Anschließend wird es durch eine neue Version desselben Programms ersetzt, sodass es unendlich ausgeführt werden kann.quelle
>
. vorausgesetzt, Sie haben ein "spezielles"$PATH
und "spezielles" umask / Dateisystem, könnenw>>w;$0
Sie es auf 7 Zeichen>>
ist angehängt , es wird irgendwann die Festplatte füllen. $0
stattexec $0
vielleicht? Ich weiß jedoch nicht, ob dies zu einem Stapelüberlauf oder etwas anderem führen wird. ... Ja, es hat einen Fehler gemacht.C
959493897890897675 BytesAuch hier
sudo watch -n1 lsof -p `pidof inf`
scheint zu sagen, dass dies gültig ist.WIE HABE ICH DIESEN RAUM NICHT GESEHEN?
Vielen Dank an @Jens für das Abschneiden von 13 Bytes: D
quelle
w+
Modus ist Lesen und Schreiben, wobei die Datei zunächst abgeschnitten wird. Da Sie nicht lesen müssen, können Sie ein Byte mit justw
abschneiden, wodurch die Datei ebenfalls abgeschnitten wird, die Datei jedoch nicht im Lesemodus geöffnet wird.return 0;
wenn die Schleife niemals endet.fputc(1,f)
statt der Super-Verbose verwendenfprintf(f," ")
?main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}
da eine leere bedingung infor
mittelntrue
. 76 Bytes.Bash, 26 Bytes
Wenn ich diesen Einzeiler erweitern würde, würde ich Folgendes bekommen:
Dies kann nicht mit der 10-Byte-PowerShell-Linie konkurrieren, kann sich aber gegen die anderen behaupten. Siehe meine andere Antwort für die 6-Byte-Version.
quelle
while :;ls>l;done
exec
Trick wird es besser machen :ls>l;exec $0
. Kürzer, aber langweilig.:>l;exec $0
-y
,yes
wird weiterhin in dasselbe Dateihandle geschrieben, über das es verfügte. Lauflsof | grep yes
und du solltest sowas sehen/path/to/y (deleted)
. Dies füllt die Festplatte und schlägt fehl.rm y
können Sie verwenden,>y
was die vorhandene Datei abschneidet. Es ist auch etwas kürzer.TI-BASIC, 12 Bytes
Alternative Lösung durch den Benutzer lirtosiast mit der gleichen Größe:
Dies funktioniert mit den Taschenrechnern der Serien TI-83 + und TI-84 +.
Ja, das funktioniert auch, wenn A bereits archiviert ist oder beim Programmstart gar nicht initialisiert wird! Das Programm hat aufgrund der Tokenisierung nur 12 Byte .
quelle
CPython 3.5,
3316 BytesJa wirklich. : D
quelle
while 1:open("a","w")
ist kürzer undstrace
zeigt, dass Python Open, Fstat64 und Close ausführt, definitiv I / O-Operationen. Wenn die Dateia
bereits vorhanden ist, kann sie sogar noch kürzer sein. Dabei wirdwhile 1:open('a')
immer noch einopen
,fstat64
undclose
und sogar eine Änderungatime
der Datei generiert .MATL , 10 Bytes
Erläuterung
Dies ist eine Endlosschleife, die die Nummer
1
in eineinout
im aktuellen Verzeichnis aufgerufene Datei schreibt und den Inhalt der vorherigen Datei überschreibt.quelle
Haskell, 20 Bytes
Schreiben Sie die Zeichenfolge
"a"
in eine Datei mit dem Namen"b"
und wiederholen Sie.writeFile
überschreibt die Datei, falls vorhanden.quelle
JavaScript (Node.js),
43 bis41 ByteSchreibt
null
in eine Datei mit dem Namena
und wiederholt sie.quelle
c
oderx
in die Datei? Spart 2 Bytes. Funktioniert das auch nichtrequire`fs`
?c
oderx
.require`fs`
Funktioniert leider nicht, da die Verwendung von Backticks zum Aufrufen einer Funktion diese mit den ersten Argumenten als["fs"]
(Array, welches erste und einzige Element die übergebene Zeichenfolge ist) anstelle von"fs"
(nur die Zeichenfolge) aufruft . Versuchen Sie esconsole.log`test`
zum Beispiel.ZSH, 14 Bytes
Zsh erlaubt im Gegensatz zu Bash und anderen Bourne-ähnlichen Muscheln Schleifen ohne
do ... done
Zaun , sofern die Bedingung angemessen abgegrenzt ist.Alternativ mit
while
:Beachten Sie, dass dies
:
ein eingebautes ist. Sie können diese Schleife nicht aussetzen.Das Prinzip ist dasselbe wie in der Antwort von Digital Trauma - nichts wird in die Datei geschrieben, die E / A besteht lediglich aus dem Erstellen und Abschneiden der Datei.
quelle
Rust, 84 Bytes
File::create
Kürzt eine vorhandene Datei und stellt so sicher, dass der Speicherplatz nicht knapp wird.Der verwendete Compiler (1.9 Nightly) gibt eine Warnung über das nicht verwendete Ergebnis aus
write(...)
, kompiliert aber trotzdem.quelle
C 92 Bytes
Es sieht zwar so aus, als könnten Sie 1 Byte speichern
Das Problem mit dieser Schleife ist, dass + Ihnen nicht die garantierte Reihenfolge gibt.
Oder rekursiv - sollte nicht überlaufen, wenn der Compiler die Endrekursion ordnungsgemäß implementiert (f liegt in einem expliziten inneren Bereich)
85 Bytes
quelle
for(;;)
und für kürzere Funktionen alsfprintf
. Wenn Sie stdio.h einschließen mussten (was Sie nicht tun), brauchen Sie kein Leerzeichen:#include<stdio.h>
Mathematica, 14 Bytes
Schreibt die Zeichenfolge wiederholt
"a"
in eine Datei mit dem Namena
im aktuellen Verzeichnis und erstellt sie, wenn sie nicht vorhanden ist.quelle
a
, die nicht definiert ist, also schreibt es nura\n
.C 40 Bytes
Es werden jedoch schnell keine Dateideskriptoren mehr vorhanden sein. Dies kann überwunden werden mit:
45, 43 Bytesquelle
int
.open()
ist keine Konstante zur Kompilierungszeit). Außerdem wird der Speicherplatz knapp, da es keinen lseek gibt. Vielleicht versuchen Sie esutime("a","")
in der Schleife, die das aktualisieren wirdctime
. (Sie müssen nochopen
eine Datei mit bekanntem Namen erstellen).lazytime
, wie ich in meiner Antwort gesagt habe.C unter amd64 Linux, 36 Bytes (nur Zeitstempel),
5249 Bytes (echte Festplattenaktivität)Ich codiere die
open(2)
Flags hart , so dass dies nicht auf andere ABIs übertragbar ist. Linux auf anderen Plattformen verwendet wahrscheinlich dasselbeO_TRUNC
usw., andere POSIX-Betriebssysteme jedoch möglicherweise nicht.+4 Bytes , um ein korrektes Berechtigungsargument zu übergeben, um sicherzustellen, dass die Datei mit dem Schreibzugriff des Besitzers erstellt wurde (siehe unten). (Dies funktioniert mit gcc 5.2)
etwas portables ANSI C, 38/51 Bytes (nur Zeitstempel), 52/67 Bytes (echte Festplattenaktivität)
Basierend auf der Antwort von @ Cat, mit einem Tipp von @Jens.
Die erste Zahl ist für Implementierungen
int
gedachtFILE *fopen()
, bei denen der Rückgabewert eines can hold ist, die zweite Zahl, wenn wir das nicht können. Unter Linux befinden sich Heap-Adressen in den unteren 32 Bit des Adressraums, daher funktioniert dies auch ohne-m32
oder-mx32
. (Deklarationvoid*fopen();
ist kürzer als#include <stdio.h>
)Nur Zeitstempel-Metadaten-E / A :
Schreiben eines Bytes unter Linux 4.2.0 + XFS +
lazytime
:write
ist die for-Schleifenbedingung, die in Ordnung ist, da sie immer 1 zurückgibt. Istclose
das Inkrement.Erklärung der nicht portierbaren Version:
Die Datei wird mit zufälligen Speicherbereinigungen erstellt. In
gcc
Version 5.2, mit-O0
oder-O3
, ist möglicherweise eine Schreibberechtigung für den Eigentümer enthalten, dies kann jedoch nicht garantiert werden.0666
ist dezimal 438. Ein drittes Argument füropen
würde weitere 4 Bytes benötigen . Wir haben bereits O_TRUNC und so weiter hartcodiert, aber dies kann mit einem anderen Compiler oder einer anderen libc auf demselben ABI zu Problemen führen.Wir können nicht die 2. arg verzichten
open
, da der Garbage Wert enthalten geschiehtO_EXCL
, undO_TRUNC|O_APPEND
, so offen nicht mitEINVAL
.Der Rückgabewert von muss nicht gespeichert werden
open()
. Wir gehen davon aus3
, dass es so ist , weil es immer so sein wird. Auch wenn wir mit fd 3 open beginnen, wird es nach der ersten Iteration geschlossen. Im schlimmsten Fall werden so langeopen
neue FDS geöffnet, bis 3 der letzte verfügbare Dateideskriptor ist. Bis zu den ersten 65531-write()
Aufrufen konnte dies fehlschlagenEBADF
, funktioniert dann aber normal mit jederopen
Erstellung von fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNC
unter x86-64 Linux. OhneO_TRUNC
werden die Inode-Mod-Zeit und die Änderungszeit nicht aktualisiert, so dass ein kürzeres Argument nicht möglich ist.O_TRUNC
ist immer noch wichtig für die Version, diewrite
zum Erzeugen der tatsächlichen Festplattenaktivität aufruft , und nicht zum erneuten Schreiben.Ich sehe einige Antworten darauf
open("a",1)
. O_CREAT ist erforderlich, fallsa
noch nicht vorhanden.O_CREAT
ist unter Linux als oktal 0100 (64, 0x40) definiert.Keine Ressourcenlecks, daher kann es für immer ausgeführt werden.
strace
Ausgabe:oder
Ich habe den Dezimalwert der
open
Flags für dieses ABIstrace -eraw=open
in meiner C ++ - Version erhalten.Auf einem Dateisystem mit
lazytime
aktivierter Linux- Mount-Option führt eine Änderung, die sich nur auf Inode-Zeitstempel auswirkt, nur zu einem Schreibvorgang pro 24 Stunden. Wenn diese Einhängeoption deaktiviert ist, kann die Zeitstempelaktualisierung möglicherweise die SSD strapazieren. (Einige andere Antworten führen jedoch nur Metadaten-E / A aus.)Alternativen:
kürzer arbeitslos :
main(){for(;;)close(write(open("a",577),"",3));}
Verwendetwrite
den Rückgabewert von 's, um ein3
Argument zum Schließen zu übergeben. Es speichert ein weiteres Byte, funktioniert aber nicht mit gcc -O0 oder -O3 auf amd64. Der Müll im 3. Argumentopen
ist anders und enthält keine Schreibrechte.a
wird das erste Mal erstellt, aber zukünftige Iterationen scheitern alle mit-EACCESS
.länger arbeiten, mit verschiedenen Systemaufrufen :
main(c){for(open("a",65);pwrite(3,"",1);)sync();}
Schreibt ein Byte an Ort und Stelle neu und ruftsync()
auf, um alle Dateisysteme systemweit zu synchronisieren. Dadurch bleibt die Laufwerksanzeige eingeschaltet.Es ist uns egal welches Byte, also übergeben wir das 4. Argument nicht an pwrite. Ja für spärliche Dateien:
Das Schreiben eines Bytes mit einem Offset von ~ 128 TB führte dazu, dass xfs 300 KB Speicherplatz für die Extent-Map benötigte. Versuchen Sie dies nicht unter OS X mit HFS +: IIRC, HFS + unterstützt keine Sparse-Dateien, daher wird die Festplatte gefüllt.
XFS ist ein richtiges 64-Bit-Dateisystem, das einzelne Dateien mit bis zu 8 Exabyte unterstützt . Dh 2 ^ 63-1, der Maximalwert
off_t
kann halten.strace
Ausgabe:quelle
Schläger, 46 Bytes
quelle
Faktor 73 Bytes
Setzt den Dateiinhalt für immer auf das Null-Byte.
quelle
CBM BASIC 7.0, 9 Bytes
Wenn dieses Programm ausgeführt wird, speichert es sich wiederholt auf der Festplatte. Hier ist eine besser lesbare Version, die keine BASIC-Schlüsselwortabkürzungen verwendet:
quelle
0 SAVE "A" : RUN
Python, 32 Bytes
Beachten Sie, dass unter Python 3 unendlich viele Warnungen ausgegeben werden. Außerdem wird es wahrscheinlich keine FDS mehr geben, wenn es in einer Implementierung ohne erneute Zählung ausgeführt wird.
quelle
write
und den"w"
Teil des Befehls open.Dyalog APL 15.0, 17 Bytes (nicht konkurrierend)
Chrome rendert derzeit U + 2262 falsch. Die obige Zeile sollte so aussehen
(⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1
.Dies ist nicht konkurrierend, da Version 15 noch nicht veröffentlicht wurde.
Wendet
⍣
die Funktion(⊢⊣⊃⎕NPUT⊢)
an,'A'1
bis der Eingang geändert wird (dh nie):⊢⊣⊃⎕NPUT⊢
ist ein Funktionszug:Das Recht kommt
⊢
zurück'A'1
unverändert zurück. Dies (Dateiname, Überschreib-Flag) ist das richtige Argument für `⎕NPUT '.'⊃' gibt das erste Element von
'A'1
(zurück'A'
) zurück; Dies sind die zu schreibenden Daten.Dann
⎕NPUT
wird ausgeführt und gemeldet, wie viele Bytes geschrieben wurden (2 oder 3, je nach Betriebssystem). Dies wird das richtige Argument für die⊣
.Das äußerste linke Ende
⊢
kehrt'A'1
unverändert zurück. Dies ist das linke Argument für die⊢
.⊣
Ignoriert das rechte Argument und gibt das linke Argument ('A'1
) zurück, dies wird der neue Wert, dem zugeführt wird⍣
.Da der neue Wert mit dem alten identisch ist, wird die Operation (für immer) fortgesetzt.
quelle
SmileBASIC, 12 Bytes
quelle
VIM-Texteditor, 10 Byte
8 Bytes, wenn Sie den Ausführungsbefehl nicht könnten
@a
quelle