Saya khawatir pengertian Anda sepenuhnya mundur. :)
Pikirkan "standar dalam", "keluar standar", dan "kesalahan standar" dari perspektif program , bukan dari perspektif kernel.
Ketika suatu program perlu mencetak keluaran, biasanya ia mencetak ke "out standar". Suatu program biasanya mencetak output ke standar dengan printf
, yang mencetak HANYA ke standar keluar.
Ketika suatu program perlu mencetak informasi kesalahan (tidak harus pengecualian, itu adalah konstruksi bahasa pemrograman, dikenakan pada tingkat yang jauh lebih tinggi), itu biasanya dicetak ke "kesalahan standar". Ini biasanya dilakukan dengan fprintf
, yang menerima aliran file untuk digunakan saat mencetak. Aliran file dapat berupa file apa saja yang dibuka untuk ditulis: standar keluar, kesalahan standar, atau file lain apa pun yang telah dibuka dengan fopen
ataufdopen
.
"standar dalam" digunakan ketika file perlu membaca input, menggunakan fread
atau fgets
, atau getchar
.
File-file ini dapat dengan mudah dialihkan dari shell, seperti ini:
cat /etc/passwd > /tmp/out # redirect cat's standard out to /tmp/foo
cat /nonexistant 2> /tmp/err # redirect cat's standard error to /tmp/error
cat < /etc/passwd # redirect cat's standard input to /etc/passwd
Atau, seluruh enchilada:
cat < /etc/passwd > /tmp/out 2> /tmp/err
Ada dua peringatan penting: Pertama, "standar dalam", "standar keluar", dan "kesalahan standar" hanyalah sebuah konvensi. Mereka adalah konvensi yang sangat kuat , tetapi itu semua hanya kesepakatan bahwa sangat bagus untuk dapat menjalankan program seperti ini:grep echo /etc/services | awk '{print $2;}' | sort
dan memiliki output standar dari setiap program yang terhubung ke input standar dari program berikutnya di dalam pipa.
Kedua, saya telah memberikan fungsi standar ISO C untuk bekerja dengan aliran file ( FILE *
objek) - pada level kernel, semuanya adalah deskriptor file ( int
referensi ke tabel file) dan banyak operasi level yang lebih rendah seperti read
dan write
, yang tidak lakukan penyanggaan senang fungsi ISO C. Saya pikir untuk membuatnya tetap sederhana dan menggunakan fungsi yang lebih mudah, tapi saya pikir semua yang sama Anda harus tahu alternatifnya. :)