Saya telah menulis sebuah program di C dan mengkompilasinya menggunakan MinGW. Ketika saya mencoba menjalankan program itu di Cygwin, sepertinya berperilaku normal (yaitu mencetak hasil yang benar, dll.)
Namun, saya mencoba menyalurkan output ke program sehingga saya dapat mengurai informasi dari output program. Namun, perpipaan tampaknya tidak berfungsi karena saya tidak mendapatkan input apa pun ke dalam program kedua.
Saya telah mengkonfirmasi ini dengan menggunakan perintah berikut:
Perintah ini tampaknya berfungsi dengan baik:
./prog
Melakukan perintah ini tidak menghasilkan apa-apa:
./prog | cat
Perintah ini memverifikasi yang pertama:
./prog | wc
Yang mengembalikan:
0 0 0
Saya tahu bahwa skrip (termasuk perpipaan dari program) berfungsi dengan baik di semua lingkungan Linux.
Adakah yang tahu mengapa perpipaan tidak berfungsi di Cygwin? Terima kasih!
more
mengarahkan atau mengalihkanstdout
ke file yang sebenarnya?Jawaban:
Kemungkinan besar ini ada hubungannya dengan buffering stdio, seperti yang diidentifikasi dan dijelaskan sebelumnya di bagian komentar. Dalam proyek MinGW saya, saya sering menggunakan konstruk berikut:
Tentu saja Anda juga dapat menambahkan panggilan ke
fflush()
dalam makro preprosesor atau saat Anda mengeluarkan data ke stdout, namun cara ini tidak menambahkan panggilan pustaka tambahan ke setiap buffer yang ditulis ke konsol Anda.sumber