Pertama, Anda perlu menampilkan baris baru saat mencetak ke std::cout
, jika tidak std::getline()
tidak akan memiliki baris lengkap untuk dibaca.
Versi yang ditingkatkan:
#include <iostream>
#include <string>
int main()
{
std::cout << "stars" << std::endl;
for(;;) {
std::string string_object;
std::getline(std::cin, string_object);
std::cout << string_object << std::endl;
}
return 0;
}
Sekarang coba ini:
./bin >file <file
Anda tidak melihat keluaran apa pun, karena akan masuk ke file. Tetapi jika Anda menghentikan program dan melihat filenya, lihatlah, itu penuh dengan
stars
stars
stars
stars
:-)
Selain itu, alasan loop umpan balik tidak dapat dimulai saat Anda mencoba
./bin 0>&1
adalah, Anda berakhir dengan stdin dan stdout yang terhubung ke /dev/tty
(artinya Anda dapat melihat hasilnya).
Namun perangkat TTY tidak akan pernah bisa menutup loop, karena sebenarnya terdiri dari dua saluran terpisah, satu meneruskan output ke terminal, satu lagi meneruskan input terminal ke proses.
Jika Anda menggunakan file biasa untuk in- dan output, loop dapat ditutup. Setiap byte yang ditulis ke file akan dibaca darinya juga, jika stdin proses terhubung dengannya. Itu selama tidak ada proses lain yang membaca dari file secara bersamaan, karena setiap byte dalam aliran hanya dapat dibaca sekali.