C / C ++: est-il possible de transmettre des données binarys via la console?

J’aimerais savoir s’il est possible qu’un utilitaire génère des données binarys (images graphiques) et les envoie via la console IO, tandis qu’une autre application, informée de la nature de ces données et informée du nombre d’octets entrants, pour le lire depuis la console IO.

    Oui c’est possible. S’il est vrai que stdin / stdout sont souvent censés être du texte, de nombreux programmes sont conçus pour obtenir une entrée binary ou pour écrire une sortie binary à partir de canaux d’E / S standard.

    La seule chose à laquelle vous devez faire attention est que normalement stdout / stdin sont ouverts en mode texte sous Windows, vous devez donc les basculer en mode binary pour éviter la traduction de caractères.

    Pour définir le mode binary sur stdin / stdout sous Windows, vous devez utiliser l’appel _setmode :

     #include  #include  #include  int main( void ) { int result; // Set "stdin" to have binary mode: result = _setmode( _fileno( stdin ), _O_BINARY ); if( result == -1 ) perror( "Cannot set mode" ); else printf( "'stdin' successfully changed to binary mode\n" ); } 

    Notez également de faire attention à la mise en mémoire tampon des fichiers. Souvent, les programmes videront la mémoire tampon sur les nouvelles lignes UNIQUEMENT lorsque la sortie se trouve sur une console interactive et non lorsqu’il s’agit d’un autre processus. Donc, si vous avez besoin de synchronisation, n’oubliez pas d’appeler fflush après avoir écrit un message, sinon l’autre processus ne pourra pas obtenir les données.

    Vous pouvez Base 64-Encode / Decode les données. Cela évitera la nécessité d’envoyer des “bits” purs sur le stream d’entrée / sortie standard.

    Vous pouvez utiliser une prise traditionnelle ou un tuyau nommé plus léger pour ce genre de chose.

    Si le processus doit être hébergé dans un autre processus qui capturera votre sortie standard du processus qui écrit les données binarys, il n’est pas nécessaire de les encoder. Dans ce cas, vous pouvez écrire les données binarys brutes dans la sortie et vous en servir. C’est par exemple le fonctionnement de l’outil de dot écriture d’image de graphviz. Il ne code pas son entrée par défaut. Ce type d’outils est également assez facile à diriger vers un fichier en utilisant > dans le shell de commande.

    Ce n’est que si la sortie des données est visible sur la console que vous aurez besoin de l’encoder. Ce n’est pas une très bonne idée d’imprimer le contenu d’un fichier image, par exemple.

    Vous pouvez le faire si vous choisissez un encodage approprié, car la console est un stream de texte. Utilisez par exemple le codage Base64 pour vos données binarys et tout fonctionnera correctement. Une autre alternative est le format ” Cité-imprimable “. Vous vous retrouvez bien sûr avec plus d’octets que les données binarys d’origine, mais à mon humble avis, le seul moyen de le faire en toute sécurité à l’aide de la console.