GNU/Linux >> Linux の 問題 >  >> Linux

プログラムの出力を入力としてリダイレクトする方法

まず、 std::cout に印刷するときに改行を出力する必要があります 、それ以外の場合は std::getline() 読むべき完全な行はありません.

改良版:

#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;
}

これを試してみてください:

./bin >file <file

ファイルに出力されるため、出力は表示されません。しかし、プログラムを停止してファイルを見ると、見よ、それはいっぱいである

stars
stars
stars
stars

:-)

また、試してみるとフィードバックループが始まらない理由

./bin 0>&1

つまり、標準入力と標準出力の両方が /dev/tty に接続されることになります (つまり、出力を見ることができます)。

しかし、TTY デバイスは実際には 2 つの別個のチャネルで構成されているため、ループを閉じることはできません。1 つは出力を端末に渡し、もう 1 つは端末入力をプロセスに渡します。

入出力に通常のファイルを使用すると、ループを閉じることができます。プロセスの標準入力がファイルに接続されている場合、ファイルに書き込まれたすべてのバイトはファイルからも読み取られます。ストリーム内の各バイトは 1 回しか読み取れないため、他のプロセスがファイルから同時に読み取りを行わない限り、これが可能です。


Linux
  1. Linux/Unixでの入力/出力リダイレクト

  2. Iconvに入力ファイルを変換された出力に置き換える方法は?

  3. プログラムの出力をZipファイルにリダイレクトする方法は??

  1. リダイレクトとパイプ出力?

  2. すでに実行中のプロセスの出力をリダイレクトする方法

  3. フィールドの数値に基づいてファイルをソートする方法は?

  1. time コマンドの出力を Linux のファイルにリダイレクトする方法は?

  2. systemd サービスの出力をファイルにリダイレクトする方法

  3. ドメインをローカルで別のドメインにリダイレクトするにはどうすればよいですか?