(Solo abre 50 pestañas en Google Chrome: D (es broma, no, no puedes))
Código más corto para E / S de disco infinito en cualquier idioma, ejemplo de C #:
using System.IO;
namespace FileApp {
static class Program {
public static void Main() {
do {
File.WriteAllText("a", "a");
File.Delete("a");
} while (true);
}
}
}
Sin embargo, no puede simplemente llenar todo el disco, ya que al final se detendría y sería finito.
Y no puedes leer solo, tiene que suceder una escritura infinita. (Tiene que matar mi SSD después de suficiente tiempo de ejecución).
¡Manos a la obra! :)

/dev/null? (¿Esyes>/dev/nulluna respuesta Bash válida?)Respuestas:
DOS / Lote: 4 bytes
Este archivo por lotes se llamará a sí mismo (
%0) y redirigirá (>) la salida a un archivo llamadox. Como echo está activado de forma predeterminada, esto generará la ruta y el comando.fuente
>esto se sobrescribirá.>>agregaríaPowerShell v2 +, 10 bytes
Simplemente realiza un bucle infinito con un
forbucle vacío . En cada iteración, sacamos el entero1(implícitamente convertido a una cadena) con el>operador de redireccionamiento , que sobrescribe el archivo nombrado1en el directorio local.fuente
Winload.exees suficiente ...1debe ser una especie de algún tipo para que el análisis implícito funcione correctamente. Cualquier cosa de[0-9]funcionaría igual.1con algo no numérico (y no especificado como.\aoa.txtsimilar) da como resultado un error de análisis.Pyth, 6 bytes
El único comando de salida de archivo de Pyth es
.w. Cuando se invoca en una cadena, escribe esa cadena en un archivo en modo anexar, lo que no es bueno para el propósito de esta pregunta. Cuando se llama en una matriz de 2-d, escribe la imagen correspondiente en ese archivo, sobrescribiendo el contenido del archivo. Eso es lo que hace este programa. El nombre de salida del archivo predeterminado eso.png, por lo que este programa sobrescribe infinitamente el archivoo.pngcon una imagen blanca de 1 píxel.#Es un bucle infinito.fuente
Si quieres una respuesta más corta (pero más aburrida que la otra):
Bash, 5 bytes
Podría hacerlo más corto si hay un comando (menos de 3 bytes de longitud) que escribe algo en la E / S del disco. Algo así
syncfuncionaría, perosynces de 4 bytes 😛Nota: esto no funciona cuando se ejecuta directamente desde bash, solo cuando se coloca un script y se ejecuta como el nombre del script. (es decir
echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb)fuente
exec(o. $0). Creo que esto se quedará sin PID.wnecesita el primero aquí? Para mí, simplemente>wcrea un archivo vacíow, y hacerlo en un bucle creará E / S infinitas porque los metadatos mtime deben actualizarse continuamente.Ruby,
2220 bytesSe trunca y escribe repetidamente
1a en el archivoa.¡Gracias a Ventero por 2 bytes!
fuente
open(?a,?w)<<1para guardar 2 bytes.cmd, 14 bytes
Sobrescribe infinitamente el archivo
1con la cadena en el directorio actualSoy nuevo aquí: ¿Las nuevas líneas de Windows (
CRLF) se cuentan como dos bytes?fuente
LFsin problemas. Lo anterior funciona para mí soloLFcon Windows 8.1, por lo que sus 14 bytes son correctos.CRLF2CR1LF1Bash + coreutils, 10
Escribe una secuencia continua de
>b, que se canalizashpara su evaluación.>bsimplemente trunca un archivo llamadoba cero bytes cada vez.fuente
by noc?Perl 5,
273222 bytesSi basta con cambiar la marca de tiempo de modificación de un archivo ...
Explicación rápida:
Solución anterior (32 bytes):
{{open my$h,'>o';print$h 1}redo}Editar:
{open F,'O';print F 1;redo}← No probé el código antes de publicarlo; ahora tenía que corregirlo.fuente
$!PHP,
60 30 17 1615 bytesActualizado una vez más según @manatwork sugirió:
También ahora probado.
Un poco de trampa 22 bytes:
while (exec ('> 1 dir'));Sugerencia anterior de @manatwork 30 bytes:
while (file_put_contents (1,1));NO PROBADO (no hay php disponible en esta computadora) 43 bytes:
para ($ a = fopen (1, 'w'); fputs ($ a, 1); fclose ($ a))Un original de golf de 45 bytes:
$ a = fopen (1, 'w'); mientras que (fputs ($ a, 1)) rebobina ($ a);Mi primera publicación aquí, me uní porque solo tenía que probar esto: mientras la escritura del archivo tenga éxito, rebobina el puntero del archivo para comenzar.
Simplemente no puede ser más pequeño que el file_put_contents ().fuente
while(file_put_contents(1,1));debería ser suficiente. Tenga en cuenta que ejecutar scripts completos desde la línea de comandosphp -r '…'es aceptable según el consenso en meta Ejecutar PHP con en-rlugar de etiquetas de código .sh, 11 bytes
Guarde esto en un archivo sin caracteres especiales, como loop.sh, hágalo ejecutable y ejecútelo con
./loop.sho similar.Esto escribe la salida del comando
wen el archivow, sobrescribiendo el valor anterior cada vez. Luego, se reemplaza con una nueva versión del mismo programa, por lo que puede ejecutarse infinitamente.fuente
>. también, suponiendo que tenga un$PATHsistema de archivos / umask "especial" y "especial", puedew>>w;$0buscarlo, reduciéndolo a 7 caracteres>>se agrega , eventualmente llenará el disco. $0lugar deexec $0, tal vez? Sin embargo, no sé si eso se ejecutará causando un desbordamiento de la pila o algo así. ... Sí, se rompió.C,
959493897890897675 bytesNuevamente,
sudo watch -n1 lsof -p `pidof inf`parece decir que esto es válido.¿CÓMO NO HE VISTO ESE ESPACIO D: <
Gracias @Jens por recortar 13 bytes: D
fuente
w+modo es lectura y escritura, inicialmente truncando el archivo. Como no necesita leer, puede eliminar un byte con solow, que también trunca el archivo, pero no abre el archivo en modo de lectura.return 0;si el ciclo nunca termina.fputc(1,f)lugar del super verbosofprintf(f," ")?main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}desde un vacío condicional enformediostrue. 76 bytes.Bash, 26 bytes
Si tuviera que expandir esta línea, obtendría esto:
Esto no puede competir exactamente con la línea PowerShell de 10 bytes, pero se mantendrá firme frente a los demás. Vea mi otra respuesta para la versión de 6 bytes.
fuente
while :;ls>l;doneexectruco hará mejor:ls>l;exec $0. Más corto pero aburrido.:>l;exec $0- la creación del archivo está escribiendo el inodoy,yesseguirá escribiendo en el mismo identificador de archivo que tenía. Correlsof | grep yesy deberías ver algo así/path/to/y (deleted). Esto llenará el disco y fallará.rm yusar,>ypuede truncar el archivo existente. También es un poco más corto.TI-BASIC, 12 bytes
Solución alternativa por usuario de lirtosiast con el mismo tamaño:
Esto funcionará en las series de calculadoras TI-83 + y TI-84 +.
¡Sí, esto también funciona si A ya está archivado o no está inicializado en absoluto al inicio del programa! El programa tiene solo 12 bytes debido a la tokenización .
fuente
CPython 3.5,
3316 bytesSí, en serio. :RE
fuente
while 1:open("a","w")es más corto ystracemuestra que python está haciendo operaciones abiertas, fstat64 y cerradas, definitivamente operaciones de E / S. Si el archivoaya existe, puede ser aún más corto: lowhile 1:open('a')que aún genera unopen,fstat64yclose, e incluso modificaatimeel archivo.MATL , 10 bytes
Explicación
Este es un bucle infinito que escribe un número
1en un archivo llamadoinouten el directorio actual, sobrescribiendo el contenido del archivo anterior.fuente
Haskell, 20 bytes
Escriba la cadena
"a"en un archivo llamado"b"y repita.writeFilesobrescribe el archivo si existe.fuente
JavaScript (Node.js),
4341 bytesEscribe
nullen un archivo llamadoa, luego repite.fuente
coxal archivo? Guarda 2 bytes. Además, norequire`fs`funciona?cox.require`fs`desafortunadamente no funciona, porque el uso de backticks para llamar a una función la llama con los primeros argumentos como["fs"](matriz, cuyo primer y único elemento es la cadena pasada) en lugar de"fs"(solo la cadena). Pruebaconsole.log`test`por ejemplo.ZSH, 14 bytes
Zsh, a diferencia de Bash y otras conchas tipo Bourne, permite bucles sin la
do ... donecerca , siempre que la condición esté delimitada adecuadamente.Alternativamente, con
while:Tenga en cuenta que
:es un incorporado. No puedes suspender este bucle.El principio es el mismo que en la respuesta de Digital Trauma : no se escribe nada en el archivo, el IO es puramente de crear y truncar el archivo.
fuente
Óxido, 84 bytes
File::createtrunca un archivo existente, asegurando así que no nos quedemos sin espacio en disco.El compilador utilizado (1.9 Nocturno) emite una advertencia sobre el resultado no utilizado
write(...)pero, sin embargo, compila.fuente
C, 92 bytes
Si bien parece que podría guardar 1 byte por
El problema con ese ciclo es que + no le da el pedido garantizado.
O recursivo: no debería desbordarse si el compilador implementa correctamente la recursión de cola (f está en un ámbito interno explícito)
85 bytes
fuente
for(;;), y para funciones más cortas quefprintf. Si necesita incluir stdio.h (que no necesita), no necesita un espacio:#include<stdio.h>Mathematica, 14 bytes
Repetidamente escribe la cadena
"a"en un archivo nombradoaen el directorio actual, creándolo si no existe.fuente
a, que no está definida, por lo que solo escribea\n.C, 40 bytes
Sin embargo, se quedará rápidamente sin descriptores de archivo; Esto se puede superar con:
45, 43 bytesfuente
int.open()no es una constante de tiempo de compilación). Además, se quedará sin espacio en disco, porque no hay lseek. Tal vez intenteutime("a","")en el bucle, que seguirá actualizando elctime. (Aúnopendebe crear un archivo de nombre conocido).lazytime, como dije en mi respuesta.C en amd64 Linux, 36 bytes (solo marca de tiempo),
5249 bytes (actividad de disco real)Codifico las
open(2)banderas, por lo que esto no es portátil para otras ABI. Linux en otras plataformas probablemente usa lo mismoO_TRUNC, etc., pero otros sistemas operativos POSIX pueden no hacerlo.+4 bytes para pasar un argumento de permiso correcto para asegurarse de que el archivo se crea con acceso de escritura del propietario, vea a continuación. (Esto sucede para trabajar con gcc 5.2)
ANSI C algo portátil, 38/51 bytes (solo marca de tiempo), 52/67 bytes (actividad real del disco)
Basado en la respuesta de @ Cat, con un consejo de @Jens.
El primer número es para implementaciones donde un valor de retorno
intpuede contenerFILE *fopen(), el segundo número si no podemos hacer eso. En Linux, las direcciones de montón se encuentran en los bajos 32 bits de espacio de direcciones, por lo que funciona incluso sin-m32o-mx32. (La declaraciónvoid*fopen();es más corta que#include <stdio.h>)Marca de tiempo de E / S de metadatos solamente :
Escribir un byte, en realidad golpear el disco en Linux 4.2.0 + XFS +
lazytime:writees la condición for-loop, que está bien ya que siempre devuelve 1.closees el incremento.Explicación de la versión no portátil:
El archivo se crea con permisos de basura aleatorios. Con
gcc5.2, con-O0o-O3, resulta que incluye permiso de escritura del propietario, pero esto no está garantizado.0666es decimal 438. Un tercer argumento paraopentomaría otros 4 bytes . Ya estamos codificando O_TRUNC, etc., pero esto podría romperse con un compilador o libc diferente en el mismo ABI.No podemos omitir el segundo argumento
open, porque el valor de la basura incluyeO_EXCL, yO_TRUNC|O_APPEND, por lo tanto, open fallaEINVAL.No necesitamos guardar el valor de retorno de
open(). Asumimos que es3, porque siempre lo será. Incluso si comenzamos con fd 3 abierto, se cerrará después de la primera iteración. En el peor de los casos,opensigue abriendo nuevos fds hasta que 3 es el último descriptor de archivo disponible. Por lo tanto, hasta las primeras 65531write()llamadas podrían fallarEBADF, pero luego funcionarán normalmente con cadaopencreación de fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNCen Linux x86-64. SinO_TRUNC, el tiempo de modificación del inodo y el tiempo de cambio no se actualizan, por lo que no es posible un argumento más corto.O_TRUNCsigue siendo esencial para la versión que llamawritea producir actividad de disco real, no a reescribir en su lugar.Veo algunas respuestas que
open("a",1). O_CREAT es obligatorio siaaún no existe.O_CREATse define como octal 0100 (64, 0x40) en Linux.No hay fugas de recursos, por lo que puede ejecutarse para siempre.
stracesalida:o
Obtuve el valor decimal de las
openbanderas para este ABI usandostrace -eraw=openen mi versión C ++.En un sistema de archivos con la
lazytimeopción de montaje de Linux habilitada, un cambio que solo afecta a las marcas de tiempo del inodo solo causará una escritura cada 24 horas. Con esa opción de montaje desactivada, la actualización de la marca de tiempo podría ser una forma viable de desgastar su SSD. (Sin embargo, varias otras respuestas solo hacen E / S de metadatos).alternativas:
más corto que no funciona :
main(){for(;;)close(write(open("a",577),"",3));}usawriteel valor de retorno para pasar un3argumento para cerrar. Guarda otro byte, pero no funciona con gcc -O0 u -O3 en amd64. La basura en el 3er argumentoopenes diferente y no incluye permiso de escritura.ase crea la primera vez, pero todas las iteraciones futuras fallan-EACCESS.más largo, trabajando, con diferentes llamadas al sistema :
main(c){for(open("a",65);pwrite(3,"",1);)sync();}reescribe un byte en el lugar y llamasync()para sincronizar todos los sistemas de archivos en todo el sistema. Esto mantiene la luz de la unidad encendida.No nos importa qué byte, por lo que no pasamos el 4to argumento para escribir. Yay para archivos dispersos:
Supongo que escribir un byte en un desplazamiento de ~ 128TiB condujo a xfs usando 300kB de espacio para contener el mapa de extensión. No intente esto en OS X con HFS +: IIRC, HFS + no admite archivos dispersos, por lo que llenará el disco.
XFS es un sistema de archivos de 64 bits adecuado, que admite archivos individuales de hasta 8 exabytes . es decir, 2 ^ 63-1, el valor máximo
off_tpuede mantenerse.stracesalida:fuente
Raqueta, 46 bytes
fuente
Factor, 73 bytes
Establece el contenido del archivo en el byte nul para siempre.
fuente
CBM BASIC 7.0, 9 bytes
Este programa, cuando se ejecuta, se guarda repetidamente en el disco. Aquí hay una versión más legible que no usa abreviaturas de palabras clave BASIC:
fuente
0 SAVE "A" : RUNPython, 32 bytes
Tenga en cuenta que si se ejecuta en Python 3, esto producirá un número infinito de advertencias. Además, probablemente se quedará sin fds si se ejecuta en una implementación sin recuento.
fuente
writey la"w"parte del comando abierto.Dyalog APL 15.0, 17 bytes (no competidor)
Chrome actualmente representa U + 2262 incorrecto. La línea de arriba debería verse así
(⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1.Esto no es competitivo porque la versión 15 aún no se ha lanzado.
Se aplica
⍣la función(⊢⊣⊃⎕NPUT⊢)en'A'1hasta que la entrada se cambia (es decir, nunca):⊢⊣⊃⎕NPUT⊢es un tren funcional:El más a la derecha
⊢vuelve'A'1sin modificar; Este (nombre de archivo, sobrescribir-bandera) será el argumento correcto para `⎕NPUT '.'⊃' devuelve el primer elemento de
'A'1('A'); Esta es la información a escribir.Luego
⎕NPUTse ejecuta e informa cuántos bytes se escribieron (2 o 3 dependiendo del sistema operativo); esto se convierte en el argumento correcto para el⊣.El extremo izquierdo
⊢vuelve nuevamente'A'1sin modificaciones; Este es el argumento izquierdo de la⊢.⊣ignora su argumento derecho y devuelve el argumento izquierdo ('A'1), este se convierte en el nuevo valor alimentado⍣.Como el nuevo valor es idéntico al anterior, la operación continúa (para siempre).
fuente
SmileBASIC, 12 bytes
fuente
editor de texto vim, 10 bytes
8 bytes si no puede el comando de ejecución
@afuente