Tulis program atau fungsi dengan fungsi berikut:
- Program / fungsi pertama kali mencoba menulis string
Hello, world!
ke aliran output standar. (Tidak ada bentuk output lain yang dapat diterima untuk tantangan ini, karena fokusnya sangat banyak pada I / O daripada perilaku sepele dari program itu sendiri.) Tergantung pada apakah itu berhasil:- Jika berhasil menghasilkan
Hello, world!
, program / fungsi keluar tanpa perilaku lebih lanjut. - Jika gagal menghasilkan output yang benar karena kesalahan, program / fungsi mencoba untuk menulis string
Error writing "Hello, world!"
ke aliran kesalahan standar. (Untuk keperluan tantangan ini, Anda tidak perlu menangani kesalahan untuk penanganan kesalahan itu sendiri.)
- Jika berhasil menghasilkan
Klarifikasi
Program / fungsi Anda akan dijalankan tanpa input (kecuali jika ditulis dalam bahasa yang benar-benar membutuhkan input untuk bekerja, dalam hal ini akan dijalankan dengan input sesederhana mungkin).
Saat menghasilkan output, Anda juga dapat menghasilkan satu baris baru jika diinginkan, tetapi melakukannya tidak wajib.
Definisi "penulisan kesalahan ke output standar" yang diterapkan oleh program Anda harus memperlakukan setidaknya kasus-kasus berikut sebagai kesalahan:
- Output standar tidak ada (yaitu
stdout
filehandle tertutup, tidak ada deskriptor file 1 ada, atau bagaimanapun kasus-kasus menerjemahkan ke bahasa dan OS yang Anda gunakan); - Output standar mengacu pada file pada disk yang tidak memiliki ruang kosong tersisa;
- Output standar yang terhubung ke program lain, yang sudah menutup ujung koneksi.
dan harus memperlakukan setidaknya kasus-kasus berikut sebagai keberhasilan (yaitu bukan kesalahan):
- Output standar terhubung ke terminal, dan
Hello, world!
ditampilkan di layar. - Output standar terhubung ke file, dan
Hello, world!
ditulis ke dalam file.
Anda dapat memilih detail dari apa yang dianggap sebagai kesalahan output, asalkan konsisten dengan aturan di atas.
- Output standar tidak ada (yaitu
Program / fungsi Anda seharusnya tidak macet saat menemukan salah satu situasi kesalahan yang tercantum di atas. Terserah Anda apa kode keluar yang Anda gunakan.
Program / fungsi Anda tidak boleh menggambarkan sifat kesalahan yang ditemui pada aliran kesalahan standar; seharusnya hanya mencetak string yang ditentukan di atas. Keluaran luar pada kesalahan standar (mis. Peringatan kompiler) hanya sah jika diproduksi tanpa syarat, terlepas dari apakah ada kesalahan atau tidak.
Program Anda hanya perlu bekerja pada satu sistem operasi (walaupun harus salah satu di mana kesalahan yang tercantum di atas masuk akal; Saya sudah mencoba membuatnya cukup umum untuk bekerja pada sebagian besar sistem operasi konsumen multitasking, tetapi sistem operasi yang lebih aneh mungkin juga dikecualikan dari tantangan ini). Jika program Anda tidak dapat diakses, daftarkan asumsi yang diperlukan untuk menjalankannya dalam judul kiriman Anda.
Tugas ini mungkin tidak dapat dilakukan di setiap bahasa (tidak semua bahasa memungkinkan program menangani kesalahan keluaran dengan cara khusus). Anda harus memilih bahasa yang memungkinkan.
Pastikan program / fungsi Anda berfungsi! Jangan hanya mempercayai dokumentasi fungsi perpustakaan untuk melakukan apa yang mereka katakan. Penanganan kesalahan fungsi output sederhana sering ternyata rusak dalam praktik, bahkan jika fungsi mengklaim untuk menangani kesalahan dalam teori.
Uji kasus
Berikut adalah cara untuk mensimulasikan masing-masing kondisi kesalahan di atas menggunakan bash
di Linux (Anda tidak harus menggunakan Linux, tetapi kemungkinan sistem yang paling mudah untuk menguji ini):
your_program_here >&- # nonexistent stdout
your_program_here > /dev/full # out of disk space
mkfifo test # note: change "test" to a filename that isn't in use
true < test &
your_program_here > test # connecting to a program that doesn't want input
rm test # clean up the FIFO we used earlier
Dua testcases pertama bersifat deterministik. Yang terakhir bukan (itu bergantung pada kondisi balapan); untuk tujuan pengujian, saya sarankan untuk menambahkan penundaan antara awal program Anda dan output aktual ke output standar, untuk memastikan bahwa kondisi balapan diselesaikan dengan cara yang mengekspos kesalahan.
Kondisi kemenangan
Ini adalah tantangan kode-golf , jadi lebih pendek lebih baik. Seperti (hampir) selalu, kami mengukur panjang program dalam byte.
sleep 1 < test; (sleep 2; your_program_here) > test
?