GNU/Linux >> Tutoriels Linux >  >> Linux

Comment rediriger la sortie du programme comme son entrée

Tout d'abord, vous devez générer des retours à la ligne lors de l'impression vers std::cout , sinon std::getline() n'aura pas de ligne complète à lire.

Version améliorée :

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

Maintenant, essayez ceci :

./bin >file <file

vous ne voyez aucune sortie, car elle va dans le fichier. Mais si vous arrêtez le programme et regardez le fichier, voyez, il est plein de

stars
stars
stars
stars

:-)

En outre, la raison pour laquelle la boucle de rétroaction ne peut pas démarrer lorsque vous essayez

./bin 0>&1

c'est-à-dire que vous vous retrouvez avec stdin et stdout connectés à /dev/tty (ce qui signifie que vous pouvez voir la sortie).

Mais un périphérique TTY ne peut jamais fermer la boucle, car il se compose en fait de deux canaux séparés, l'un transmettant la sortie au terminal, l'autre transmettant l'entrée du terminal au processus.

Si vous utilisez un fichier normal pour l'entrée et la sortie, la boucle peut être fermée. Chaque octet écrit dans le fichier sera également lu à partir de celui-ci, si le stdin du processus y est connecté. Tant qu'aucun autre processus ne lit simultanément le fichier, car chaque octet d'un flux ne peut être lu qu'une seule fois.


Linux
  1. Redirection d'entrée/sortie sous Linux/Unix

  2. Comment rediriger uniquement Stderr ?

  3. Rediriger et canaliser la sortie ?

  4. Comment rediriger la sortie vers un fichier et stdout

  5. Comment rediriger la sortie de la commande time vers un fichier sous Linux ?

Comment enregistrer la sortie de la commande dans un fichier sous Linux

Comment rediriger stderr vers stdout dans Bash

Comment rediriger la sortie de la commande shell

Comment rediriger la sortie de system() vers un fichier ?

Comment rediriger la sortie du service systemd vers un fichier

Comment rediriger un domaine vers un autre domaine localement ?