GNU/Linux >> Znalost Linux >  >> Linux

Jak přesměrovat výstup programu jako jeho vstup

Nejprve musíte při tisku do std::cout vytisknout nové řádky , jinak std::getline() nebude mít žádný celý řádek ke čtení.

Vylepšená verze:

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

Nyní zkuste toto:

./bin >file <file

nevidíte žádný výstup, protože jde do souboru. Ale pokud zastavíte program a podíváte se na soubor, hle, je plný

stars
stars
stars
stars

:-)

Také důvod, proč se při pokusu nemůže spustit smyčka zpětné vazby

./bin 0>&1

je, že skončíte se stdin i stdout připojenými k /dev/tty (to znamená, že můžete vidět výstup).

Ale TTY zařízení nemůže nikdy uzavřít smyčku, protože se ve skutečnosti skládá ze dvou samostatných kanálů, z nichž jeden předává výstup do terminálu a druhý předává terminálový vstup procesu.

Pokud pro vstup a výstup použijete běžný soubor, lze smyčku uzavřít. Každý bajt zapsaný do souboru se z něj také přečte, pokud je k němu připojen stdin procesu. To je tak dlouho, dokud žádný jiný proces nečte soubor současně, protože každý bajt v proudu lze přečíst pouze jednou.


Linux
  1. Jak přesměrovat pouze Stderr?

  2. Jak přesměrovat výstup do souboru a stdout

  3. Jak připojit výstup do souboru?

  1. Jak přesměrovat výstup system() do souboru?

  2. Jak přesměrovat výstup příkazu time do souboru v Linuxu?

  3. Jak přesměrovat výstup služby systemd do souboru

  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  3. Jak lokálně přesměruji doménu na jinou doménu?