Ceci est généralement fait avec des tuyaux. Pipes semblent fonctionner très bien dans les environnements que j'ai testé (et obtenir beaucoup de travail fait en!) Dans Windows 10, plus précisément:Comment diffuser de grandes quantités de données entre les processus dans bash dans Windows?
- Git bash
- MSYS2 bash
J'ai trouvé si j'ai un gros fichier ou un flux binaire que je peux utiliser avec précision certains des outils installés (cat largefile.JPG | wc -c
), mais chaque fois que j'écris mes propres programmes de traitement d'image avec C++, quelle que soit la méthode avec cstdio
old school C méthodes, avec un programme C, ou avec C++ cin
iostreams) Je n'obtiens qu'une petite fraction du flux avant qu'elle ne se termine. La longueur de celui-ci semble être déterministe, donc le même fichier produit le même résultat.
Tester le même code sur OS X ou Linux conduit évidemment à un fonctionnement correct où la longueur du flux stdin est la bonne longueur. De ce fait, cela est pratique sur ces plates-formes pour transmettre des données sans toucher le disque. Je perfectionnais mon bash-fu depuis une dizaine d'années, donc ça se fait naturellement.
Bien sûr, il existe d'autres méthodes que je peux exploiter, mais je ne peux pas vraiment trouver quelque chose rapidement sur lequel je peux compter. Quelles sont les choses que je pourrais essayer de résoudre ce problème ici? J'aime vraiment l'ensemble des outils unix je peux installer avec pacman à l'intérieur MSYS2, y compris
g++.exe (Rev2, Built by MSYS2 project) 7.1.0
Copyright (C) 2017 Free Software Foundation, Inc.
Mais ceci est mon un gros bloc d'achoppement jusqu'à présent. Mon programme le plus simple compilé avec ce compilateur est incapable d'extraire une quantité utile de données du flux d'entrée standard. Pourquoi donc? Si c'est une limitation du système d'exploitation, ou de la couche posix et de toute cette magie noire, alors pourquoi fonctionne-t-il parfaitement? wc
Veuillez montrer votre programme exécutable le plus simple, compilable, qui ne parvient pas à lire tout le 'stdin' et comment vous l'exécutez. –
J'ai utilisé le code [this] (https://stackoverflow.com/a/3495410/340947), et lancez-le comme ceci: 'cat large.JPG | ./taille'. Il est compilé avec 'gcc size.c -o size'. –
Avez-vous regardé https://github.com/borgbackup/borg/pull/2032? – zortacon