GNU/Linux >> Linux Esercitazione >  >> Linux

Come reindirizzare l'output del programma come input

Per prima cosa, devi generare nuove righe quando stampi su std::cout , altrimenti std::getline() non avrà alcuna riga completa da leggere.

Versione migliorata:

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

Ora prova questo:

./bin >file <file

non vedi alcun output, perché va al file. Ma se interrompi il programma e guardi il file, ecco, è pieno di

stars
stars
stars
stars

:-)

Inoltre, il motivo per cui il ciclo di feedback non può iniziare quando provi

./bin 0>&1

è che ti ritroverai con stdin e stdout collegati a /dev/tty (significa che puoi vedere l'output).

Ma un dispositivo TTY non può mai chiudere il ciclo, perché in realtà consiste di due canali separati, uno che passa l'output al terminale, l'altro che passa l'input del terminale al processo.

Se usi un file normale per l'in- e l'output, il ciclo può essere chiuso. Ogni byte scritto nel file verrà letto anche da esso, se lo stdin del processo è connesso ad esso. Finché nessun altro processo legge dal file contemporaneamente, perché ogni byte in un flusso può essere letto solo una volta.


Linux
  1. Come reindirizzare l'output su un file e Stdout in Linux

  2. Come fare in modo che Iconv sostituisca il file di input con l'output convertito?

  3. Come reindirizzare l'output di un programma su un file zip?

  4. Come reindirizzare solo Stderr?

  5. Reindirizzamento e uscita del tubo?

Come reindirizzare stderr a stdout in Bash

Come reindirizzare l'output del comando della shell

Come reindirizzare l'output del servizio systemd su un file

Come reindirizzare l'intero output di spark-submit a un file

Come posso reindirizzare un dominio a un altro dominio in locale?

iftop - come generare un file di testo con il suo output?