(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/null
una 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
for
bucle vacío . En cada iteración, sacamos el entero1
(implícitamente convertido a una cadena) con el>
operador de redireccionamiento , que sobrescribe el archivo nombrado1
en el directorio local.fuente
Winload.exe
es suficiente ...1
debe ser una especie de algún tipo para que el análisis implícito funcione correctamente. Cualquier cosa de[0-9]
funcionaría igual.1
con algo no numérico (y no especificado como.\a
oa.txt
similar) 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.png
con 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í
sync
funcionaría, perosync
es 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.w
necesita el primero aquí? Para mí, simplemente>w
crea 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
1
a en el archivoa
.¡Gracias a Ventero por 2 bytes!
fuente
open(?a,?w)<<1
para guardar 2 bytes.cmd, 14 bytes
Sobrescribe infinitamente el archivo
1
con la cadena en el directorio actualSoy nuevo aquí: ¿Las nuevas líneas de Windows (
CR
LF
) se cuentan como dos bytes?fuente
LF
sin problemas. Lo anterior funciona para mí soloLF
con Windows 8.1, por lo que sus 14 bytes son correctos.CR
LF
2CR
1LF
1Bash + coreutils, 10
Escribe una secuencia continua de
>b
, que se canalizash
para su evaluación.>b
simplemente trunca un archivo llamadob
a cero bytes cada vez.fuente
b
y 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-r
lugar 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.sh
o similar.Esto escribe la salida del comando
w
en 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$PATH
sistema de archivos / umask "especial" y "especial", puedew>>w;$0
buscarlo, reduciéndolo a 7 caracteres>>
se agrega , eventualmente llenará el disco. $0
lugar 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 enfor
mediostrue
. 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;done
exec
truco hará mejor:ls>l;exec $0
. Más corto pero aburrido.:>l;exec $0
- la creación del archivo está escribiendo el inodoy
,yes
seguirá escribiendo en el mismo identificador de archivo que tenía. Correlsof | grep yes
y deberías ver algo así/path/to/y (deleted)
. Esto llenará el disco y fallará.rm y
usar,>y
puede 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 ystrace
muestra que python está haciendo operaciones abiertas, fstat64 y cerradas, definitivamente operaciones de E / S. Si el archivoa
ya existe, puede ser aún más corto: lowhile 1:open('a')
que aún genera unopen
,fstat64
yclose
, e incluso modificaatime
el archivo.MATL , 10 bytes
Explicación
Este es un bucle infinito que escribe un número
1
en un archivo llamadoinout
en el directorio actual, sobrescribiendo el contenido del archivo anterior.fuente
Haskell, 20 bytes
Escriba la cadena
"a"
en un archivo llamado"b"
y repita.writeFile
sobrescribe el archivo si existe.fuente
JavaScript (Node.js),
4341 bytesEscribe
null
en un archivo llamadoa
, luego repite.fuente
c
ox
al archivo? Guarda 2 bytes. Además, norequire`fs`
funciona?c
ox
.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 ... done
cerca , 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::create
trunca 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 nombradoa
en 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únopen
debe 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
int
puede 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-m32
o-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
:write
es la condición for-loop, que está bien ya que siempre devuelve 1.close
es el incremento.Explicación de la versión no portátil:
El archivo se crea con permisos de basura aleatorios. Con
gcc
5.2, con-O0
o-O3
, resulta que incluye permiso de escritura del propietario, pero esto no está garantizado.0666
es decimal 438. Un tercer argumento paraopen
tomarí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,open
sigue 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 cadaopen
creación de fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNC
en 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_TRUNC
sigue siendo esencial para la versión que llamawrite
a producir actividad de disco real, no a reescribir en su lugar.Veo algunas respuestas que
open("a",1)
. O_CREAT es obligatorio sia
aún no existe.O_CREAT
se define como octal 0100 (64, 0x40) en Linux.No hay fugas de recursos, por lo que puede ejecutarse para siempre.
strace
salida:o
Obtuve el valor decimal de las
open
banderas para este ABI usandostrace -eraw=open
en mi versión C ++.En un sistema de archivos con la
lazytime
opció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));}
usawrite
el valor de retorno para pasar un3
argumento para cerrar. Guarda otro byte, pero no funciona con gcc -O0 u -O3 en amd64. La basura en el 3er argumentoopen
es diferente y no incluye permiso de escritura.a
se 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_t
puede mantenerse.strace
salida: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" : RUN
Python, 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
write
y 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'1
hasta que la entrada se cambia (es decir, nunca):⊢⊣⊃⎕NPUT⊢
es un tren funcional:El más a la derecha
⊢
vuelve'A'1
sin 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
⎕NPUT
se 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'1
sin 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
@a
fuente