GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo redirigir la salida del programa como su entrada

Primero, debe generar líneas nuevas al imprimir en std::cout , de lo contrario std::getline() no tendrá ninguna línea completa para leer.

Versión mejorada:

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

Ahora prueba esto:

./bin >file <file

no ve ninguna salida, porque va al archivo. Pero si detienes el programa y miras el archivo, mira, está lleno de

stars
stars
stars
stars

:-)

Además, la razón por la que el ciclo de retroalimentación no puede comenzar cuando intenta

./bin 0>&1

es que terminas con stdin y stdout conectados a /dev/tty (lo que significa que puede ver la salida).

Pero un dispositivo TTY nunca puede cerrar el ciclo, porque en realidad consta de dos canales separados, uno que pasa la salida a la terminal y otro que pasa la entrada de la terminal al proceso.

Si usa un archivo regular para entrada y salida, el bucle se puede cerrar. Cada byte escrito en el archivo también se leerá, si el stdin del proceso está conectado a él. Eso es siempre que ningún otro proceso lea el archivo simultáneamente, porque cada byte en una secuencia solo se puede leer una vez.


Linux
  1. Cómo guardar la salida del comando en un archivo en Linux

  2. Cómo redirigir la salida a un archivo y salida estándar en Linux

  3. Redirección de entrada/salida en Linux/Unix

  4. ¿Cómo redirigir solo Stderr?

  5. Cómo redirigir la salida a un archivo y stdout

Cómo redirigir stderr a stdout en Bash

Cómo redirigir la salida del comando de shell

¿Cómo redirigir la salida de system() a un archivo?

¿Cómo redirigir la salida del comando de tiempo a un archivo en Linux?

Cómo redirigir la salida del servicio systemd a un archivo

Cómo redirigir la salida completa de spark-submit a un archivo