(Il suffit d'ouvrir 50 onglets dans Google Chrome: D (je plaisante, non, vous ne pouvez pas))
Code le plus court pour les E / S disque infinies n’importe quel langage, exemple en C #:
using System.IO;
namespace FileApp {
static class Program {
public static void Main() {
do {
File.WriteAllText("a", "a");
File.Delete("a");
} while (true);
}
}
}
Cependant, vous ne pouvez pas simplement remplir le disque en entier, car cela s’arrêterait à la fin et serait fini.
Et vous ne pouvez pas lire uniquement, une écriture infinie doit se produire. (Il doit tuer mon SSD après suffisamment de temps d'exécution.)
Obtenez craquer! :)
/dev/null
? (Uneyes>/dev/null
réponse Bash est -elle valide?)Réponses:
DOS / Lot: 4 octets
Ce fichier de commandes s'appellera (
%0
) et redirigera (>
) la sortie vers un fichier appeléx
. Comme echo est activé par défaut, le chemin et la commande seront générés.la source
>
cela sera écrasé.>>
serait annexerPowerShell v2 +, 10 octets
for
Boucle simplement infiniment avec une boucle vide . À chaque itération, nous produisons l'entier1
(converti implicitement en chaîne) avec l'>
opérateur de redirection , qui écrase le fichier nommé1
dans le répertoire local.la source
Winload.exe
suffit ...1
doit être un certain nombre pour que l'analyse implicite fonctionne correctement. Tout ce[0-9]
qui marcherait fonctionnerait de la même manière.1
par quelque chose de non numérique (et non spécifié comme.\a
oua.txt
similaire) entraîne une erreur d'analyse.Pyth, 6 octets
La seule commande de sortie de fichier de Pyth est
.w
. Lorsqu'il est appelé sur une chaîne, il écrit cette chaîne dans un fichier en mode ajout, ce qui ne sert à rien pour les besoins de cette question. Lorsqu'il est appelé sur un tableau 2D, il écrit l'image correspondante dans ce fichier, en remplaçant le contenu du fichier. C'est ce que fait ce programme. Le nom de sortie du fichier par défaut esto.png
, de sorte que ce programme écrase infiniment le fichiero.png
avec une image blanche de 1 pixel.#
est une boucle infinie.la source
Si vous voulez une réponse plus courte (mais plus ennuyeuse que mon autre):
Bash, 5 octets
Je pourrais rendre cela plus court s'il y avait une commande (moins de 3 octets) qui écrit quelque chose sur les E / S du disque. Quelque chose comme ça
sync
marcherait, maissync
c'est 4 octetsRemarque: cela ne fonctionne pas lorsqu'il est exécuté directement à partir de bash, uniquement lorsqu'il est placé dans un script et exécuté sous le nom du script. (ie
echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb
)la source
exec
(ou. $0
). Je pense que cela va manquer de PID.w
nécessaire ici? Pour moi,>w
crée simplement un fichier videw
et le faire en boucle créera des E / S infinies, car les métadonnées mtime doivent être mises à jour en permanence.Ruby,
22 à20 octetsÀ plusieurs reprises, tronque et écrit un
1
dans le fichiera
.Merci à Ventero pour 2 octets!
la source
open(?a,?w)<<1
pour sauvegarder 2 octets.cmd, 14 octets
Écrase infiniment le fichier
1
avec la chaîne dans le répertoire en coursJe suis nouveau ici: les nouvelles lignes de Windows (
CR
LF
) sont-elles comptées comme deux octets?la source
LF
sans problème. Ce qui précède fonctionne pour moi uniquement avecLF
Windows 8.1, vos 14 octets sont donc corrects.CR
LF
2CR
1LF
1Bash + coreutils, 10
Écrit un flux continu de
>b
, qui est dirigé verssh
pour évaluation.>b
tronque simplement un fichier appeléb
à zéro octet à chaque fois.la source
b
et pasc
?Perl 5,
273222 octetsSi le simple changement de l'horodatage de modification d'un fichier suffit ...
Explication rapide:
Solution précédente (32 octets):
{{open my$h,'>o';print$h 1}redo}
Edit:
{open F,'O';print F 1;redo}
← N'a pas testé le code avant de poster; maintenant je devais le corriger.la source
$
!PHP,
60 30 17 1615 octetsMis à jour encore une fois selon les suggestions de @manatwork:
Aussi maintenant testé.
Un peu de tricherie 22 octets:
while (exec ('> 1 dir'));Suggestion précédente de @manatwork 30 octets:
while (file_put_contents (1,1));NOT TESTED (pas de php disponible sur cet ordinateur) 43 octets:
pour ($ a = fopen (1, 'w'); fputs ($ a, 1); fclose ($ a))Un original golfique de 45 octets:
$ a = fopen (1, 'w'); tandis que (fputs ($ a, 1)) rembobine ($ a);Mon premier post ici, rejoint parce que je devais simplement essayer ceci: tant que l'écriture de fichier réussit, rembobinez le pointeur de fichier pour commencer.
Ne peut tout simplement pas être plus petit que file_put_contents ().la source
while(file_put_contents(1,1));
devrait suffire. Notez que l’exécution de scripts complets à partir de la ligne de commandephp -r '…'
est acceptable comme consensus sur la méta Exécution de PHP avec-r
des balises de code .sh, 11 octets
Enregistrez-le dans un fichier sans caractères spéciaux, tel que loop.sh, rendez-le exécutable et exécutez-le avec
./loop.sh
ou similaire.Ceci écrit la sortie de la commande
w
dans le fichierw
, écrasant la valeur précédente à chaque fois. Ensuite, il se remplace par une nouvelle version du même programme, afin de pouvoir fonctionner à l'infini.la source
>
. de plus, en supposant que vous ayez un$PATH
système de fichiers / umask "spécial" et "spécial", vous pouvez vous permettre de lew>>w;$0
>>
is append, il finira par remplir le disque. $0
au lieu deexec $0
peut-être? Je ne sais pas si cela va provoquer un débordement de pile ou autre. ... Oui, il a été défectueux.C,
959493897890897675 octetsEncore une fois,
sudo watch -n1 lsof -p `pidof inf`
semble dire que c'est valide.COMMENT NE VOIS-JE PAS CET ESPACE D: <
Merci @Jens d' avoir réduit 13 octets: D
la source
w+
mode est en lecture et en écriture, tronquant initialement le fichier. Comme vous n'avez pas besoin de lire, vous pouvez supprimer un octet avec justw
, ce qui tronque également le fichier, mais ne l'ouvre pas en mode lecture.return 0;
si la boucle ne se termine jamais.fputc(1,f)
place du super-verbeuxfprintf(f," ")
?main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}
depuis un conditionnel vide enfor
moyenstrue
. 76 octets.Bash, 26 octets
Si je devais développer ce one-line, j'obtiendrais ceci:
Cela ne peut pas rivaliser avec la ligne PowerShell de 10 octets, mais elle se démarquera des autres. Voir mon autre réponse pour la version à 6 octets.
la source
while :;ls>l;done
exec
truc va faire mieux:ls>l;exec $0
. Plus court, mais ennuyeux.:>l;exec $0
- la création de fichier est en train d'écrire l'inodey
, vousyes
continuerez à écrire sur le même descripteur de fichier qu’il possédait. Courezlsof | grep yes
et vous devriez voir quelque chose comme/path/to/y (deleted)
. Cela va remplir le disque et échouer.rm y
vous pouvez utiliser>y
ce qui tronquera le fichier existant. C'est aussi un peu plus court.TI-BASIC, 12 octets
Solution alternative de l'utilisateur lirtosiast avec la même taille:
Cela fonctionnera avec les calculatrices des séries TI-83 + et TI-84 +.
Oui, cela fonctionne aussi si A est déjà archivé ou n'est pas initialisé du tout au début du programme! Le programme n’a que 12 octets à cause de la tokenisation .
la source
CPython 3.5,
3316 octetsOui vraiment. :RÉ
la source
while 1:open("a","w")
est plus court etstrace
montre que python effectue des opérations d’ouverture / fermeture fstat64 et close, sans aucun doute. Si le fichiera
existe déjà, il peut être encore plus court: cewhile 1:open('a')
qui génère encore unopen
,fstat64
etclose
, et même modifieatime
du fichier.MATL , 10 octets
Explication
Il s'agit d'une boucle infinie qui écrit le numéro
1
dans un fichier appeléinout
dans le répertoire en cours, écrasant le contenu du fichier précédent.la source
Haskell, 20 octets
Ecrivez la chaîne
"a"
dans un fichier nommé"b"
et recommencez.writeFile
écrase le fichier s'il existe.la source
JavaScript (Node.js),
4341 octetsÉcrit
null
dans un fichier nomméa
, puis recommencez.la source
c
oux
du fichier? Enregistre 2 octets. Aussi, nerequire`fs`
fonctionne pas ?c
oux
.require`fs`
Malheureusement, cela ne fonctionne pas, parce que l'appel d'une fonction à l'aide de backticks appelle les premiers arguments comme suit["fs"]
(array, dont le premier et unique élément est la chaîne passée) au lieu de"fs"
(uniquement la chaîne). Essayezconsole.log`test`
par exemple.ZSH, 14 octets
Zsh, contrairement à Bash et aux autres coques de type Bourne, autorise les boucles sans la
do ... done
clôture , à condition que la condition soit correctement délimitée.Alternativement, avec
while
:Notez que
:
c'est un construit. Vous ne pouvez pas suspendre cette boucle.Le principe est le même que dans la réponse de Digital Trauma : rien n'est écrit dans le fichier, l'IO provient uniquement de la création et de la troncature du fichier.
la source
Rouille, 84 octets
File::create
tronque un fichier existant, assurant ainsi que nous ne manquons pas d’espace disque.Le compilateur utilisé (1.9 Nightly) émet un avertissement sur le résultat inutilisé de
write(...)
mais compile néanmoins.la source
C, 92 octets
Bien qu’il semble que vous puissiez économiser 1 octet sur
Le problème avec cette boucle est que + ne vous donne pas l'ordre garanti.
Ou récursif - ne devrait pas déborder si le compilateur implémente correctement la récursion finale (f est dans une portée interne explicite)
85 octets
la source
for(;;)
, et pour des fonctions plus courtes quefprintf
. Si vous avez besoin d'inclure stdio.h (ce que vous n'avez pas), vous n'avez pas besoin d'espace:#include<stdio.h>
Mathematica, 14 octets
Ecrit à plusieurs reprises la chaîne
"a"
dans un fichier nomméa
dans le répertoire en cours, en la créant si elle n'existe pas.la source
a
, qui n'est pas définie, donc il écrita\n
.C, 40 octets
Il va rapidement manquer de descripteurs de fichiers; ceci peut être surmonté avec:
45, 43 octetsla source
int
.open()
n'est pas une constante de compilation). En outre, il manquera d’espace disque, car il n’ya pas de code lseek. Essayez peut-êtreutime("a","")
dans la boucle, qui continuera à mettre à jour lectime
. (Vous devez encoreopen
créer un fichier de nom connu).lazytime
, comme je l'ai dit dans ma réponse.C sur amd64 Linux, 36 octets (horodatage uniquement),
5249 octets (activité réelle du disque)Je code en dur les
open(2)
drapeaux, donc ce n'est pas portable pour les autres ABI. Linux sur d'autres plates-formes utilise probablement la même choseO_TRUNC
, etc., mais pas les autres systèmes d'exploitation POSIX.+4 octets pour passer un argument d'autorisation correct afin de vous assurer que le fichier est créé avec un accès en écriture propriétaire, voir ci-dessous. (Ceci arrive avec gcc 5.2)
ANSI C relativement portable, 38/51 octets (horodatage uniquement), 52/67 octets (activité réelle du disque)
Basé sur la réponse de @Chat, avec un conseil de @Jens.
Le premier nombre est destiné aux implémentations dans lesquelles une valeur
int
peut êtreFILE *fopen()
retournée, le deuxième nombre si nous ne pouvons pas le faire. Sous Linux, il se trouve que les adresses de segment de mémoire se situent dans les 32 bits d'espace disque, de sorte que cela fonctionne même sans-m32
ou-mx32
. (Déclarervoid*fopen();
est plus court que#include <stdio.h>
)Métadonnées d'horodatage I / O uniquement :
Écrire un octet, frapper le disque sous Linux 4.2.0 + XFS +
lazytime
:write
est la condition de boucle for, ce qui est correct car elle renvoie toujours 1.close
est l'incrément.Explication de la version non portable:
Le fichier est créé avec des autorisations aléatoires. Avec
gcc
5.2, avec-O0
ou-O3
, il arrive que l’autorisation d’écriture du propriétaire soit incluse, mais cela n’est pas garanti.0666
est un nombre décimal 438. Un 3ème argumentopen
prendrait encore 4 octets . Nous sommes déjà en train de coder en dur O_TRUNC, etc., mais cela pourrait rompre avec un compilateur ou une libc différent sur le même ABI.Nous ne pouvons pas omettre le 2nd argument
open
, car la valeur de garbage inclutO_EXCL
, etO_TRUNC|O_APPEND
donc, open échoue avecEINVAL
.Nous n'avons pas besoin de sauvegarder la valeur de retour de
open()
. Nous supposons que c'est3
parce que ça le sera toujours. Même si nous commençons par ouvrir fd 3, il sera fermé après la première itération. Dans le pire des cas,open
continue d'ouvrir de nouveaux fichiers jusqu'à ce que 3 soit le dernier descripteur de fichier disponible. Ainsi, jusqu'aux premiers 65531write()
appels pourraient échouer avecEBADF
, mais fonctionneront ensuite normalement avec chaqueopen
création fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNC
sous Linux x86-64. Sans celaO_TRUNC
, le temps d'inode mod et le temps de changement ne sont pas mis à jour, donc un argument plus court n'est pas possible.O_TRUNC
est toujours essentiel pour la version qui appellewrite
pour générer une activité de disque réelle et non pour réécrire en place.Je vois des réponses qui
open("a",1)
. O_CREAT est requis s'ila
n'existe pas déjà.O_CREAT
est défini comme octal 0100 (64, 0x40) sous Linux.Aucune ressource ne fuit, elle peut donc fonctionner pour toujours.
strace
sortie:ou
J'ai eu la valeur décimale des
open
drapeaux pour cette ABI en utilisantstrace -eraw=open
ma version C ++.Sur un système de fichiers avec l'
lazytime
option de montage Linux activée, une modification qui affecte uniquement les horodatages d'inode ne provoquera qu'une écriture par 24 heures. Avec cette option de montage désactivée, la mise à jour d'horodatage peut constituer un moyen viable d'user votre disque SSD. (Cependant, plusieurs autres réponses ne font que des métadonnées d'E / S).alternatives:
plus court non-travail :
main(){for(;;)close(write(open("a",577),"",3));}
utilisewrite
la valeur de retour pour passer un3
argument à fermer. Il enregistre un autre octet, mais ne fonctionne pas avec gcc -O0 ou -O3 sur amd64. La poubelle du 3ème argumentopen
est différente et n'inclut pas l'autorisation d'écriture.a
est créé la première fois, mais les itérations futures échouent-EACCESS
.plus long, fonctionnel, avec différents appels système :
main(c){for(open("a",65);pwrite(3,"",1);)sync();}
réécrit un octet sur place et appellesync()
à synchroniser tous les systèmes de fichiers à l'échelle du système. La lumière de lecteur reste allumée.Nous ne nous soucions pas de quel octet, nous ne passons donc pas le 4ème argument à écrire. Yay pour les fichiers clairsemés:
Écrire un octet avec un décalage de ~ 128 To a conduit xfs à utiliser 300 ko d'espace pour contenir la carte d'étendue, je suppose. N'essayez pas ceci sur OS X avec HFS +: IIRC, HFS + ne supporte pas les fichiers fragmentés, il va donc remplir le disque.
XFS est un système de fichiers 64 bits approprié, prenant en charge des fichiers individuels allant jusqu'à 8 exaoctets . c'est-à-dire 2 ^ 63-1, la valeur maximale
off_t
peut être retenue.strace
sortie:la source
Raquette, 46 octets
la source
Facteur, 73 octets
Définit le contenu du fichier sur l'octet nul pour toujours.
la source
CBM BASIC 7.0, 9 octets
Ce programme, lorsqu'il est exécuté, s'enregistre de manière répétée sur le disque. Voici une version plus lisible qui n'utilise pas les abréviations de mots-clés BASIC:
la source
0 SAVE "A" : RUN
Python, 32 octets
Notez que s'il est exécuté sur python 3, cela produira un nombre infini d'avertissements. En outre, il manquera probablement de fds s'il est exécuté dans une implémentation sans calcul en parallèle.
la source
write
et la"w"
partie de la commande open.Dyalog APL 15.0, 17 octets (non concurrents)
Chrome rend actuellement U + 2262 incorrect. La ligne ci-dessus devrait ressembler
(⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1
.Ceci n’est pas concurrentiel car la version 15 n’a pas encore été publiée.
Applique
⍣
la fonction(⊢⊣⊃⎕NPUT⊢)
sur'A'1
jusqu'à ce que l'entrée est modifié (jamais):⊢⊣⊃⎕NPUT⊢
est un train de fonction:Le plus à droite
⊢
revient'A'1
non modifié; ceci (nom de fichier, overwrite-flag) sera le bon argument pour ``NPUT '.'' Renvoie le premier élément de
'A'1
('A'
); ce sont les données à écrire.Ensuite,
⎕NPUT
est exécuté et indique le nombre d'octets écrits (2 ou 3 selon le système d'exploitation); cela devient le bon argument pour le⊣
.Le plus
⊢
à gauche retourne à nouveau'A'1
non modifié; c'est l'argument de gauche à la⊢
.⊣
ignore son argument de droite et renvoie l'argument de gauche ('A'1
), cela devient la nouvelle valeur alimentée⍣
.Comme la nouvelle valeur est identique à l’ancienne, l’opération est poursuivie (pour toujours).
la source
SmileBASIC, 12 octets
la source
éditeur de texte vim, 10 octets
8 octets si vous ne pouvez pas la commande d'exécution
@a
la source