(Cukup buka 50 tab di Google Chrome: D (hanya bercanda, tidak Anda tidak bisa))
Kode terpendek untuk disk I / O tak terbatas bahasa apa pun, C # contoh:
using System.IO;
namespace FileApp {
static class Program {
public static void Main() {
do {
File.WriteAllText("a", "a");
File.Delete("a");
} while (true);
}
}
}
Anda tidak bisa hanya mengisi seluruh disk, karena pada akhirnya akan berhenti dan akan terbatas.
Dan Anda tidak bisa hanya membaca, tulisan yang tak terbatas harus terjadi. (Ini harus membunuh SSD saya setelah runtime yang cukup.)
Dapatkan retak! :)
/dev/null
? (Apakahyes>/dev/null
jawaban Bash yang valid?)Jawaban:
DOS / Batch: 4 byte
File batch ini akan memanggil dirinya sendiri (
%0
) dan mengarahkan ulang (>
) output ke file yang disebutx
. Karena gema aktif secara default, ini akan menampilkan path dan perintah.sumber
>
itu akan ditimpa.>>
akan menambahkanPowerShell v2 +, 10 byte
Cukup loop tanpa batas dengan
for
loop kosong . Setiap iterasi, kami mengeluarkan integer1
(secara implisit dikonversi menjadi string) dengan>
operator pengalihan , yang menimpa file yang disebutkan1
dalam direktori lokal.sumber
Winload.exe
sudah cukup ...1
perlu sejumlah semacam agar parsing implisit untuk bekerja dengan benar. Apa pun dari[0-9]
akan bekerja sama.1
dengan sesuatu yang non-numerik (dan tidak ditentukan sebagai.\a
ataua.txt
atau sejenisnya) menghasilkan kesalahan parse.Pyth, 6 byte
Perintah keluaran file hanya Pyth adalah
.w
. Ketika dipanggil pada string, string itu dituliskan ke file dalam mode append, yang tidak baik untuk keperluan pertanyaan ini. Ketika dipanggil pada array 2-d, itu menulis gambar yang sesuai untuk file itu, menimpa isi file. Itulah yang dilakukan oleh program ini. Nama output file default adalaho.png
, jadi program ini secara tak terbatas menimpa fileo.png
dengan gambar putih 1-pixel.#
adalah loop tak terbatas.sumber
Jika Anda ingin jawaban yang lebih pendek (tapi lebih membosankan daripada yang lain):
Bash, 5 byte
Saya bisa membuatnya lebih pendek jika ada perintah (kurang dari 3 byte panjang) yang menulis sesuatu ke disk I / O. Sesuatu seperti
sync
akan berfungsi, tetapisync
4 byte 😛Catatan: ini tidak berfungsi saat dijalankan langsung dari bash, hanya ketika dimasukkan ke dalam skrip dan dijalankan sebagai nama skrip. (yaitu
echo 'w>w;$0' > bomb; chmod 755 bomb; ./bomb
)sumber
exec
(atau. $0
). Saya pikir ini akan kehabisan PID.w
dibutuhkan di sini? Bagi saya cukup>w
membuat file kosongw
, dan melakukan itu dalam satu lingkaran akan membuat I / O yang tak terbatas karena metadata mtime perlu diperbarui terus menerus.Ruby,
2220 byteBerulang kali memotong dan menulis
1
ke filea
.Terima kasih kepada Ventero untuk 2 byte!
sumber
open(?a,?w)<<1
untuk menyimpan 2 byte.cmd, 14 byte
Infinitly menimpa file
1
dengan string ke direktori saat iniSaya baru di sini: Apakah baris baru windows (
CR
LF
) dihitung sebagai dua byte?sumber
LF
tanpa masalah. Di atas berfungsi untuk saya hanya denganLF
Windows 8.1, jadi 14 byte Anda sudah benar.CR
LF
2CR
1LF
1Bash + coreutils, 10
Menulis aliran berkelanjutan
>b
, yang disalurkan kesh
untuk evaluasi.>b
cukup memotong file yang dipanggilb
ke nol byte setiap kali.sumber
b
dan tidakc
?Perl 5,
273222 byteJika hanya mengubah stempel waktu modifikasi file sudah cukup ...
Penjelasan cepat:
Solusi sebelumnya (32 byte):
{{open my$h,'>o';print$h 1}redo}
Sunting:
{open F,'O';print F 1;redo}
← Tidak menguji kode sebelum memposting; sekarang saya harus memperbaikinya.sumber
$
!PHP,
60 30 17 1615 byteDiperbarui lagi seperti yang disarankan @manatwork:
Juga sekarang diuji.
Sedikit kecurangan 22 byte:
while (exec ('> 1 dir'));Saran sebelumnya oleh @manatwork 30 byte:
while (file_put_contents (1,1));TIDAK DIUJI (tidak tersedia php di komputer ini) 43 byte:
untuk ($ a = fopen (1, 'w'); fputs ($ a, 1); fclose ($ a))Asli 45 byte golf:
$ a = fopen (1, 'w'); while (fputs ($ a, 1)) rewind ($ a);Posting pertama saya di sini, bergabung karena saya hanya harus mencoba ini: selama file berhasil ditulis, mundur file pointer untuk memulai.
Hanya tidak bisa lebih kecil dari file_put_contents ().sumber
while(file_put_contents(1,1));
Seharusnya cukup. Perhatikan bahwa menjalankan skrip penuh dari baris perintah sebagaimanaphp -r '…'
dapat diterima sesuai konsensus tentang meta Menjalankan PHP dengan-r
bukannya tag kode .sh, 11 byte
Simpan ini ke file tanpa karakter khusus, seperti loop.sh, buat itu dapat dieksekusi, dan jalankan dengan
./loop.sh
atau serupa.Ini menulis output dari perintah
w
ke filew
, menimpa nilai sebelumnya setiap kali. Kemudian, ia mengganti dirinya sendiri dengan versi baru dari program yang sama, sehingga dapat berjalan tanpa batas.sumber
>
. juga, dengan asumsi Anda memiliki$PATH
sistem file /w>>w;$0
>>
ditambahkan, ia akhirnya akan mengisi disk. $0
bukannyaexec $0
, mungkin? Saya tidak tahu apakah itu akan berjalan menyebabkan stack overflow atau sesuatu. ... Yap, segfaulted.C,
959493897890897675 byteSekali lagi,
sudo watch -n1 lsof -p `pidof inf`
sepertinya mengatakan ini valid.BAGAIMANA SAYA TIDAK MELIHAT RUANG YANG D: <
Terima kasih @Jens untuk mencukur 13 byte: D
sumber
w+
mode membaca dan menulis, awalnya truncating file. Karena Anda tidak perlu membaca, Anda dapat mengurangi byte hanya denganw
, yang juga memotong file, tetapi tidak membuka file dalam mode baca.return 0;
jika loop tidak pernah berakhir.fputc(1,f)
bukan super-verbosefprintf(f," ")
?main(){for(FILE*f=fopen("a","w");;fputc(1,f),fclose(f));}
karena kondisional kosongfor
berartitrue
. 76 byteBash, 26 byte
Jika saya ingin memperluas one-liner ini, saya akan mendapatkannya:
Ini tidak bisa benar-benar bersaing dengan garis PowerShell 10 byte, tetapi akan bertahan sendiri terhadap yang lain. Lihat jawaban saya yang lain untuk versi 6 byte.
sumber
while :;ls>l;done
exec
trik akan melakukan yang lebih baik:ls>l;exec $0
. Lebih pendek, tapi membosankan.:>l;exec $0
- pembuatan file sedang menulis inodey
,yes
masih akan terus menulis ke pegangan file yang sama dengan yang dimilikinya. Jalankanlsof | grep yes
dan Anda akan melihat sesuatu seperti/path/to/y (deleted)
. Ini akan mengisi disk dan gagal.rm y
Anda dapat menggunakan>y
yang akan memotong file yang ada. Ini juga sedikit lebih pendek.TI-BASIC, 12 byte
Solusi alternatif oleh pengguna lirtosiast dengan ukuran yang sama:
Ini akan bekerja pada seri kalkulator TI-83+ dan TI-84+.
Ya, ini juga berfungsi jika A sudah diarsipkan atau tidak diinisialisasi sama sekali pada awal program! Program ini hanya 12 byte karena tokenization .
sumber
CPython 3.5,
3316 byteYa benar : D
sumber
while 1:open("a","w")
lebih pendek danstrace
menunjukkan bahwa python melakukan open, fstat64 dan close, pasti operasi I / O. Jika filea
sudah ada, bahkan bisa lebih pendek:while 1:open('a')
yang masih menghasilkanopen
,fstat64
danclose
, dan bahkan memodifikasiatime
file.MATL , 10 byte
Penjelasan
Ini adalah loop tak terbatas yang menulis nomor
1
ke file yang disebutinout
di direktori saat ini, menimpa konten file sebelumnya.sumber
Haskell, 20 byte
Tulis string
"a"
ke file bernama"b"
dan ulangi.writeFile
menimpa file jika ada.sumber
JavaScript (Node.js),
4341 byteMenulis
null
ke file bernamaa
, lalu ulangi.sumber
c
ataux
ke file? Menghemat 2 byte. Juga, tidakrequire`fs`
berhasil?c
ataux
.require`fs`
sayangnya tidak berfungsi, karena menggunakan backticks untuk memanggil fungsi memanggilnya dengan argumen pertama sebagai["fs"]
(array, yang elemen pertama dan satu-satunya adalah string yang diteruskan) alih-alih"fs"
(hanya string). Cobaconsole.log`test`
misalnya.ZSH, 14 byte
Zsh, tidak seperti Bash dan cangkang mirip Bourne lainnya, memungkinkan loop tanpa
do ... done
pagar , asalkan kondisinya sesuai dibatasi.Atau, dengan
while
:Perhatikan bahwa itu
:
adalah builtin. Anda tidak dapat menangguhkan loop ini.Prinsipnya sama dengan jawaban Digital Trauma - tidak ada yang tertulis pada file, IO murni dari membuat dan memotong file.
sumber
Rust, 84 Bytes
File::create
memotong file yang sudah ada, sehingga memastikan bahwa kami tidak kehabisan ruang disk.Compiler yang digunakan (1.9 Nightly) mengeluarkan peringatan tentang hasil yang tidak digunakan dari
write(...)
tetapi mengkompilasi.sumber
C, 92 byte
Meskipun sepertinya Anda bisa menghemat 1 byte
masalah dengan loop itu adalah + tidak memberi Anda pesanan yang dijamin.
Atau rekursif - tidak boleh meluap jika kompiler dengan benar mengimplementasikan rekursi ekor (f berada dalam lingkup bagian dalam yang eksplisit)
85 byte
sumber
for(;;)
, dan untuk fungsi yang lebih pendek darifprintf
. Jika Anda memang perlu memasukkan stdio.h (yang tidak Anda miliki), Anda tidak perlu spasi:#include<stdio.h>
Mathematica, 14 byte
Berulang kali menulis string
"a"
ke file yang bernamaa
di direktori saat ini, membuatnya jika tidak ada.sumber
a
, yang tidak terdefinisi, jadi ia hanya menulisa\n
.C, 40 byte
Akan dengan cepat kehabisan deskriptor file; ini dapat diatasi dengan:
45, 43 bytesumber
int
.open()
bukan konstanta waktu kompilasi). Juga, itu akan kehabisan ruang disk, karena tidak ada lseek. Mungkin cobautime("a","")
di loop, yang akan terus memperbaruictime
. (Anda masih harusopen
membuat file dengan nama yang dikenal).lazytime
, seperti yang saya katakan dalam jawaban saya.C pada amd64 Linux, 36 byte (hanya timestamp),
5249 byte (aktivitas disk nyata)Saya membuat kode yang sulit pada
open(2)
flag, jadi ini tidak portabel untuk ABI lain. Linux pada platform lain kemungkinan menggunakan hal yang samaO_TRUNC
, dll., Tetapi OS POSIX lain mungkin tidak.+4 byte untuk memberikan arg izin yang benar untuk memastikan file dibuat dengan akses tulis pemilik, lihat di bawah. (Ini terjadi untuk bekerja dengan gcc 5.2)
ANSI C agak portabel, 38/51 byte (hanya cap waktu), 52/67 byte (aktivitas disk nyata)
Berdasarkan jawaban @ Cat, dengan tip dari @Jens.
Angka pertama adalah untuk implementasi di mana suatu
int
dapat menyimpanFILE *fopen()
nilai kembali, nomor kedua jika kita tidak bisa melakukan itu. Di Linux, tumpukan alamat kebetulan berada di ruang alamat 32 bit yang rendah, sehingga bisa berfungsi bahkan tanpa-m32
atau-mx32
. (Mendeklarasikanvoid*fopen();
lebih pendek dari#include <stdio.h>
)Hanya metadata I / O stempel waktu :
Menulis byte, sebenarnya memukul disk di Linux 4.2.0 + XFS +
lazytime
:write
adalah kondisi for-loop, yang baik-baik saja karena selalu mengembalikan 1.close
adalah kenaikan.Penjelasan dari versi non-portabel:
File dibuat dengan izin sampah acak. Dengan
gcc
5.2, dengan-O0
atau-O3
, itu terjadi untuk menyertakan izin menulis pemilik, tetapi ini tidak dijamin.0666
adalah desimal 438. Arg ke-3open
akan membutuhkan 4 byte lagi . Kami sudah mengkodekan O_TRUNC dan seterusnya, tetapi ini bisa terputus dengan kompiler atau libc yang berbeda pada ABI yang sama.Kita tidak dapat menghilangkan argumen ke-2
open
, karena nilai sampah kebetulan termasukO_EXCL
, danO_TRUNC|O_APPEND
, jadi gagal gagalEINVAL
.Kami tidak perlu menyimpan nilai pengembalian dari
open()
. Kami berasumsi itu3
, karena akan selalu begitu. Bahkan jika kita mulai dengan fd 3 terbuka, itu akan ditutup setelah iterasi pertama. Kasing terburuk,open
terus membuka fds baru hingga 3 adalah deskriptor file terakhir yang tersedia. Jadi, hingga 65531write()
panggilan pertama bisa gagalEBADF
, tetapi kemudian akan bekerja secara normal dengan setiapopen
pembuatan fd = 3.577 = 0x241 =
O_WRONLY|O_CREAT|O_TRUNC
di x86-64 Linux. TanpaO_TRUNC
, waktu mod inode dan waktu perubahan tidak diperbarui, jadi arg yang lebih pendek tidak mungkin.O_TRUNC
masih penting untuk versi yang memanggilwrite
untuk menghasilkan aktivitas disk yang sebenarnya, bukan menulis ulang di tempat.Saya melihat beberapa jawaban itu
open("a",1)
. O_CREAT diperlukan jikaa
belum ada.O_CREAT
didefinisikan sebagai oktal 0100 (64, 0x40) di Linux.Tidak ada sumber daya bocor, sehingga bisa berjalan selamanya.
strace
keluaran:atau
Saya mendapat nilai desimal dari
open
flag untuk ABI ini menggunakanstrace -eraw=open
versi C ++ saya.Pada sistem file dengan
lazytime
opsi pemasangan Linux diaktifkan, perubahan yang hanya memengaruhi cap waktu inode hanya akan menyebabkan satu penulisan per 24 jam. Dengan opsi pemasangan yang dinonaktifkan, pemutakhiran stempel waktu mungkin merupakan cara yang layak untuk memakai SSD Anda. (Namun, beberapa jawaban lain hanya melakukan metadata I / O).alternatif:
lebih pendek tidak bekerja :
main(){for(;;)close(write(open("a",577),"",3));}
menggunakanwrite
nilai balik untuk melewatkan3
arg untuk menutup. Ini menyimpan byte lain, tetapi tidak bekerja dengan gcc -O0 atau -O3 pada amd64. Sampah di arg ke-3open
berbeda, dan tidak termasuk izin menulis.a
akan dibuat pertama kali, tetapi iterasi di masa mendatang semuanya gagal-EACCESS
.lebih lama, bekerja, dengan panggilan sistem yang berbeda :
main(c){for(open("a",65);pwrite(3,"",1);)sync();}
menulis ulang byte di tempat dan panggilansync()
untuk menyinkronkan semua sistem file di seluruh sistem. Ini membuat lampu drive menyala.Kami tidak peduli byte mana, jadi kami tidak meneruskan argumen ke 4 ke pwrite. Yay untuk file jarang:
Menulis satu byte pada offset ~ 128TiB menyebabkan xfs menggunakan 300kiB ruang untuk menampung peta sebatas, saya kira. Jangan coba ini di OS X dengan HFS +: IIRC, HFS + tidak mendukung file jarang, sehingga akan mengisi disk.
XFS adalah sistem file 64bit yang tepat, mendukung masing-masing file hingga 8 exabytes . yaitu 2 ^ 63-1, nilai maksimum
off_t
dapat disimpan.strace
keluaran:sumber
Racket, 46 byte
sumber
Faktor, 73 byte
Menyetel konten file ke byte nul selamanya.
sumber
CBM BASIC 7.0, 9 byte
Program ini, ketika dijalankan, berulang kali menyimpan dirinya ke disk. Berikut adalah versi yang lebih mudah dibaca yang tidak menggunakan singkatan kata kunci BASIC:
sumber
0 SAVE "A" : RUN
Python, 32 byte
Perhatikan bahwa jika dijalankan pada python 3, ini akan menghasilkan jumlah peringatan yang tak terbatas. Juga, mungkin akan kehabisan fds jika dijalankan dalam implementasi non-penghitungan ulang.
sumber
write
dan"w"
bagian dari perintah terbuka.Dyalog APL 15.0, 17 byte (tidak bersaing)
Chrome saat ini membuat U + 2262 salah. Baris di atas akan terlihat seperti
(⊢⊣⊃⎕NPUT⊢)⍣̸≡'A'1
.Ini tidak bersaing karena versi 15 belum dirilis.
Berlaku
⍣
fungsi(⊢⊣⊃⎕NPUT⊢)
pada'A'1
sampai input berubah (yaitu tidak pernah):⊢⊣⊃⎕NPUT⊢
adalah kereta fungsi:Paling kanan
⊢
kembali'A'1
dimodifikasi; ini (nama file, timpa-bendera) akan menjadi argumen yang tepat untuk `PNPUT '.'⊃' mengembalikan elemen pertama dari
'A'1
('A'
); ini adalah data yang akan ditulis.Kemudian
⎕NPUT
dijalankan, dan melaporkan berapa byte yang ditulis (2 atau 3 tergantung pada OS); ini menjadi argumen yang tepat untuk⊣
.Yang paling kiri
⊢
kembali'A'1
tidak dimodifikasi; ini adalah argumen kiri ke⊢
.⊣
mengabaikan argumen kanannya dan mengembalikan argumen kiri ('A'1
), ini menjadi nilai baru yang diumpankan ke⍣
.Karena nilai baru identik dengan yang lama, operasi dilanjutkan (selamanya).
sumber
SmileBASIC, 12 byte
sumber
editor teks vim, 10 byte
8 byte jika Anda tidak bisa menjalankan perintah
@a
sumber