(Basta abrir 50 guias no Google Chrome: D (brincadeira, não, você não pode))
Código mais curto para E / S de disco infinita em qualquer idioma, exemplo em C #:
using System.IO;
namespace FileApp {
static class Program {
public static void Main() {
do {
File.WriteAllText("a", "a");
File.Delete("a");
} while (true);
}
}
}
Você não pode simplesmente encher o disco inteiro, pois ele acabaria no final e seria finito.
E você não pode ler apenas, a escrita infinita precisa acontecer. (Ele precisa matar meu SSD após tempo de execução suficiente.)
Get cracking! :)
/dev/null
? (Éyes>/dev/null
uma resposta Bash válido?)Respostas:
DOS / lote: 4 bytes
Esse arquivo em lote se chamará (
%0
) e redirecionará (>
) a saída para um arquivo chamadox
. Como o eco está ativado por padrão, isso produzirá o caminho e o comando.fonte
>
ele será substituído.>>
acrescentariaPowerShell v2 +, 10 bytes
Basta fazer um loop infinito com um
for
loop vazio . A cada iteração, produzimos o número inteiro1
(convertido implicitamente em uma string) com o>
operador redirecionar , que substitui o arquivo nomeado1
no diretório local.fonte
Winload.exe
é suficiente ...1
precisa ser um tipo de número para que a análise implícita funcione corretamente. Qualquer coisa[0-9]
funcionaria da mesma maneira.1
por qualquer coisa não numérica (e não especificada como.\a
oua.txt
semelhante) resulta em um erro de análise.Pitão, 6 bytes
O único comando de saída de arquivos de Pyth é
.w
. Quando chamada em uma string, ela grava essa string em um arquivo no modo de acréscimo, o que não é bom para o propósito desta pergunta. Quando chamado em uma matriz 2-d, ele grava a imagem correspondente nesse arquivo, substituindo o conteúdo do arquivo. É isso que este programa faz. O nome padrão da saída do arquivo éo.png
, portanto, este programa substitui infinitamente o arquivoo.png
com uma imagem branca de 1 pixel.#
é um loop infinito.fonte
Se você quer uma resposta mais curta (mas mais chata do que a minha outra):
Bash, 5 bytes
Eu poderia tornar isso mais curto se houver um comando (com menos de 3 bytes) que grave algo na E / S do disco. Algo como
sync
funcionaria, massync
tem 4 bytes 😛Nota: isso não funciona quando executado diretamente do bash, apenas quando colocado em um script e executado como o nome do script. (ie
echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb
)fonte
exec
(ou. $0
). Eu acho que isso ficará sem PIDs.w
necessário aqui? Para mim, basta>w
criar um arquivo vaziow
, e fazer isso em um loop criará E / S infinita porque os metadados do mtime precisam ser atualizados continuamente.Ruby,
2220 bytesTrunca e grava repetidamente um
1
no arquivoa
.Obrigado ao Ventero por 2 bytes!
fonte
open(?a,?w)<<1
para salvar 2 bytes.cmd, 14 bytes
Substitui infinitamente o arquivo
1
com a sequência no diretório atualEu sou novo aqui: as novas linhas do Windows (
CR
LF
) são contadas como dois bytes?fonte
LF
sem problemas. O procedimento acima funciona para mim apenasLF
no Windows 8.1, portanto seus 14 bytes estão corretos.CR
LF
2CR
1LF
1Bash + coreutils, 10
Grava um fluxo contínuo de
>b
, o qual é canalizadosh
para avaliação.>b
simplesmente trunca um arquivo chamadob
para zero bytes a cada vez.fonte
b
e nãoc
?Perl 5,
273222 bytesSe simplesmente alterar o registro de data e hora da modificação de um arquivo for suficiente ...
Explicação rápida:
Solução anterior (32 bytes):
{{open my$h,'>o';print$h 1}redo}
Edit:
{open F,'O';print F 1;redo}
← Não testou o código antes de postar; agora eu tinha que corrigi-lo.fonte
$
!PHP,
60 30 17 1615 bytesAtualizado mais uma vez de acordo com o @manatwork sugerido:
Também agora testado.
Um pouco de trapaça 22 bytes:
while (exec ('> 1 dir'));Sugestão anterior de @manatwork 30 bytes:
while (file_put_contents (1,1));NÃO TESTADO (nenhum php disponível neste computador) 43 bytes:
for ($ a = fopen (1, 'w'); fputs ($ a, 1); fclose ($ a))Um original com 45 bytes de golfe:
$ a = fopen (1, 'w'); while (fputs ($ a, 1)) retrocede ($ a);Meu primeiro post aqui entrou porque eu só tinha que tentar isso: contanto que a gravação do arquivo seja bem-sucedida, rebobine o ponteiro do arquivo para iniciar.
Só não pode ficar menor que o file_put_contents ().fonte
while(file_put_contents(1,1));
deve ser suficiente. Note-se que a execução de scripts completos de linha de comando comophp -r '…'
é aceitável como por consenso sobre meta Correndo PHP com-r
em vez de tags de código .sh, 11 bytes
Salve isso em um arquivo sem caracteres especiais, como loop.sh, torne-o executável e execute-o com
./loop.sh
ou similar.Isso grava a saída do comando
w
no arquivow
, substituindo o valor anterior a cada vez. Em seguida, ele se substitui por uma nova versão do mesmo programa, para que possa ser executado infinitamente.fonte
>
. Além disso, supondo que você tem um "especial"$PATH
e "especial" umask / sistema de arquivos, você pode ir paraw>>w;$0
, salga-lo até 7 caracteres>>
é de acréscimo, ele acabará por encher o disco. $0
vez deexec $0
, talvez? Não sei se isso será executado, causando um estouro de pilha ou algo assim. ... Sim, ele falhou.C,
959493897890897675 bytesMais uma vez,
sudo watch -n1 lsof -p `pidof inf`
parece dizer que isso é válido.COMO EU NÃO VI ESSE ESPAÇO D: <
Obrigado @ Jens por cortar 13 bytes: D
fonte
w+
modo é leitura e gravação, inicialmente truncando o arquivo. Como você não precisa ler, você pode cortar um byte com justw
, que também trunca o arquivo, mas não abre o arquivo no modo de leitura.return 0;
se o loop nunca terminar.fputc(1,f)
vez do super verbosofprintf(f," ")
?main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}
desde que um condicional vazio emfor
médiastrue
. 76 bytes.Bash, 26 bytes
Se eu expandisse essa linha única, obteria o seguinte:
Isso não pode competir exatamente com a linha PowerShell de 10 bytes, mas se manterá contra os outros. Veja minha outra resposta para a versão de 6 bytes.
fonte
while :;ls>l;done
exec
truque vai fazer melhor:ls>l;exec $0
. Mais curto, mas chato.:>l;exec $0
- Criação de arquivo está escrevendo o inodey
,yes
continuará a gravar no mesmo identificador de arquivo que possuía. Corralsof | grep yes
e você verá algo como/path/to/y (deleted)
. Isso irá encher o disco e falhar.rm y
você pode usar o>y
que truncará o arquivo existente. Também é um pouco mais curto.TI-BASIC, 12 bytes
Solução alternativa pelo usuário lirtosiast com o mesmo tamanho:
Isso funcionará nas calculadoras TI-83 + e TI-84 +.
Sim, isso também funciona se A já estiver arquivado ou não for inicializado no início do programa! O programa tem apenas 12 bytes devido à tokenização .
fonte
CPython 3.5,
3316 bytesSim com certeza. : D
fonte
while 1:open("a","w")
é mais curto estrace
mostra que o python está executando operações open, fstat64 e close, definitivamente de E / S. Se o arquivoa
já existir, ele poderá ser ainda mais curto: owhile 1:open('a')
que ainda gera umopen
,fstat64
eclose
, e até modificaatime
o arquivo.MATL , 10 bytes
Explicação
Este é um loop infinito que grava número
1
em um arquivo chamadoinout
no diretório atual, substituindo o conteúdo do arquivo anterior.fonte
Haskell, 20 bytes
Escreva a string
"a"
em um arquivo nomeado"b"
e repita.writeFile
sobrescreve o arquivo, se existir.fonte
JavaScript (Node.js),
4341 bytesGrava
null
em um arquivo chamadoa
e repita.fonte
c
oux
no arquivo? Salva 2 bytes. Além disso, nãorequire`fs`
funciona?c
oux
.require`fs`
infelizmente não funciona, porque o uso de backticks para chamar uma função a chama com os primeiros argumentos como["fs"]
(array, que primeiro e único elemento é a string passada) em vez de"fs"
(apenas a string). Tenteconsole.log`test`
por exemplo.ZSH, 14 bytes
O Zsh, diferentemente do Bash e de outras conchas do tipo Bourne, permite loops sem a
do ... done
cerca , desde que a condição seja adequadamente delimitada.Alternativamente, com
while
:Observe que
:
é um builtin. Você não pode suspender esse loop.O princípio é o mesmo da resposta do Digital Trauma - nada é gravado no arquivo, o IO é apenas para criar e truncar o arquivo.
fonte
Ferrugem, 84 bytes
File::create
trunca um arquivo existente, garantindo assim que o espaço em disco não fique vazio.O compilador usado (1.9 Nightly) emite um aviso sobre o resultado não utilizado,
write(...)
mas compila mesmo assim.fonte
C, 92 bytes
Embora pareça que você poderia economizar 1 byte
o problema com esse loop é que + não fornece a ordem garantida.
Ou recursivo - não deve estourar se o compilador implementar corretamente a recursão de cauda (f está em um escopo interno explícito)
85 bytes
fonte
for(;;)
e para funções mais curtas quefprintf
. Se você precisava incluir stdio.h (o que não é o seu caso), não precisa de um espaço:#include<stdio.h>
Mathematica, 14 bytes
Grava repetidamente a string
"a"
em um arquivo nomeadoa
no diretório atual, criando-o se não existir.fonte
a
, que é indefinida, então apenas escrevea\n
.C, 40 bytes
Porém, ele rapidamente ficará sem descritores de arquivo; isso pode ser superado com:
45, 43 bytesfonte
int
.open()
não é uma constante em tempo de compilação). Além disso, ficará sem espaço em disco, porque não há lseek. Talvez tenteutime("a","")
no loop, que continuará atualizando o arquivoctime
. (Você ainda precisaopen
criar um arquivo com nome conhecido).lazytime
, como eu disse na minha resposta.C no amd64 Linux, 36 bytes (somente timestamp),
5249 bytes (atividade em disco real)Eu
open(2)
codifico os sinalizadores, portanto, isso não é portátil para outras ABIs. O Linux em outras plataformas provavelmente usa o mesmoO_TRUNC
, etc., mas outros sistemas operacionais POSIX podem não.+4 bytes para passar um argumento de permissão correto para garantir que o arquivo seja criado com acesso de gravação do proprietário, veja abaixo. (Isso funciona com o gcc 5.2)
ANSI C um tanto portátil, 38/51 bytes (somente carimbo de data / hora), 52/67 bytes (atividade em disco real)
Com base na resposta de @ Cat, com uma dica de @Jens.
O primeiro número é para implementações em que um
int
pode reterFILE *fopen()
o valor de retorno, o segundo número, se não pudermos fazer isso. No Linux, os endereços de heap estão com pouco espaço de endereço de 32 bits; portanto, ele funciona mesmo sem-m32
ou-mx32
. (A declaraçãovoid*fopen();
é menor que#include <stdio.h>
)Somente E / S de metadados de carimbo de data e hora :
Escrevendo um byte, atingindo o disco no Linux 4.2.0 + XFS +
lazytime
:write
é a condição do loop for, o que é bom, pois sempre retorna 1.close
é o incremento.Explicação da versão não portátil:
O arquivo é criado com permissões aleatórias de lixo. Com o
gcc
5.2, com-O0
ou-O3
, inclui permissão de gravação do proprietário, mas isso não é garantido.0666
é decimal 438. Um terceiro argumentoopen
levaria outros 4 bytes . Nós já estamos codificando O_TRUNC e assim por diante, mas isso pode ocorrer com um compilador ou libc diferente na mesma ABI.Não podemos omitir o segundo argumento para
open
, porque o valor do lixo incluiO_EXCL
, eO_TRUNC|O_APPEND
, portanto, a abertura falha comEINVAL
.Não precisamos salvar o valor de retorno
open()
. Nós assumimos que é3
, porque sempre será. Mesmo se começarmos com o fd 3 aberto, ele será fechado após a primeira iteração. Na pior das hipóteses,open
continua abrindo novos fds até que 3 seja o último descritor de arquivo disponível. Portanto, até as primeiras 65531write()
chamadas podem falharEBADF
, mas funcionarão normalmente com toda aopen
criação de fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNC
no x86-64 Linux. SemO_TRUNC
, o tempo de modificação do inode e o tempo de alteração não são atualizados, portanto, um argumento mais curto não é possível.O_TRUNC
ainda é essencial para a versão que chamawrite
para produzir a atividade real do disco, não para reescrever no local.Eu vejo algumas respostas isso
open("a",1)
. O_CREAT é necessário sea
ainda não existir.O_CREAT
é definido como octal 0100 (64, 0x40) no Linux.Nenhum vazamento de recursos, portanto, ele pode ser executado para sempre.
strace
resultado:ou
Eu tenho o valor decimal dos
open
sinalizadores para este ABI usandostrace -eraw=open
na minha versão C ++.Em um sistema de arquivos com a
lazytime
opção de montagem Linux ativada, uma alteração que afeta apenas os carimbos de data / hora do inode causará apenas uma gravação a cada 24 horas. Com essa opção de montagem desativada, a atualização do carimbo de data / hora pode ser uma maneira viável de desgastar seu SSD. (No entanto, várias outras respostas fazem apenas E / S de metadados).alternativas:
menos tempo de trabalho :
main(){for(;;)close(write(open("a",577),"",3));}
usawrite
o valor de retorno para passar um3
argumento para fechar. Ele salva outro byte, mas não funciona com o gcc -O0 ou -O3 no amd64. O lixo no terceiro argumento paraopen
é diferente e não inclui permissão de gravação.a
é criado na primeira vez, mas todas as iterações futuras falham-EACCESS
.por mais tempo, trabalhando, com diferentes chamadas do sistema :
main(c){for(open("a",65);pwrite(3,"",1);)sync();}
reescreve um byte no local e chamasync()
para sincronizar todos os sistemas de arquivos em todo o sistema. Isso mantém a luz da unidade acesa.Nós não nos importamos com qual byte, então não passamos o quarto argumento para escrever. Yay para arquivos esparsos:
Escrever um byte em um deslocamento de ~ 128TiB levou ao xfs usando 300kiB de espaço para armazenar o mapa de extensão, eu acho. Não tente fazer isso no OS X com o HFS +: IIRC, o HFS + não suporta arquivos esparsos; portanto, ele preencherá o disco.
O XFS é um sistema de arquivos adequado de 64 bits, suportando arquivos individuais de até 8 exabytes . ou seja, 2 ^ 63-1, o valor máximo
off_t
pode ser mantido.strace
resultado:fonte
Raquete, 46 bytes
fonte
Fator, 73 bytes
Define o conteúdo do arquivo para o byte nul para sempre.
fonte
CBM BASIC 7.0, 9 bytes
Este programa, quando executado, se salva repetidamente em disco. Aqui está uma versão mais legível que não usa abreviações de palavras-chave BASIC:
fonte
0 SAVE "A" : RUN
Python, 32 bytes
Observe que, se executado no python 3, isso produzirá um número infinito de avisos. Além disso, provavelmente ficará sem fds se for executado em uma implementação sem refcounting.
fonte
write
a"w"
parte e do comando open.Dyalog APL 15.0, 17 bytes (não concorrente)
Atualmente, o Chrome processa U + 2262 errado. A linha acima deve parecer
(⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1
.Isso não é concorrente porque a versão 15 ainda não foi lançada.
Aplica-se
⍣
a função(⊢⊣⊃⎕NPUT⊢)
em'A'1
até que a entrada é alterado (ou seja, nunca):⊢⊣⊃⎕NPUT⊢
é um trem de função:O mais à direita
⊢
retorna sem'A'1
modificação; este (nome do arquivo, sinalizador de substituição) será o argumento correto para `PNPUT '.'⊃' retorna o primeiro elemento de
'A'1
('A'
); esses são os dados a serem gravados.Em seguida,
⎕NPUT
é executado e relata quantos bytes foram gravados (2 ou 3, dependendo do SO); este se torna o argumento certo para o⊣
.O mais à esquerda
⊢
novamente retorna sem'A'1
modificação; este é o argumento da esquerda para o⊢
.⊣
ignora seu argumento da direita e retorna o argumento da esquerda ('A'1
), esse se torna o novo valor alimentado para⍣
.Como o novo valor é idêntico ao antigo, a operação é continuada (para sempre).
fonte
SmileBASIC, 12 bytes
fonte
editor de texto vim, 10 bytes
8 bytes se você não puder executar o comando de execução
@a
fonte