GNU/Linux >> Belajar Linux >  >> Linux

Cara mengarahkan output program sebagai inputnya

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.


Linux
  1. Cara Mengarahkan Output ke File dan Stdout di Linux

  2. Pengalihan Input/Output di Linux/Unix

  3. Bagaimana Cara Mengarahkan Hanya Stderr?

  1. Redirect Dan Output Pipa?

  2. Cara mengarahkan output dari proses yang sudah berjalan

  3. Bagaimana cara mengurutkan file, berdasarkan nilai numeriknya untuk suatu bidang?

  1. Bagaimana cara mengarahkan output dari system() ke file?

  2. Bagaimana cara mengarahkan output dari perintah waktu ke file di Linux?

  3. Cara mengarahkan output dari layanan systemd ke file