Perché alcuni processi cmd lanciato blocco di uscita / buffer quando l'output viene reindirizzato?

StackOverflow https://stackoverflow.com/questions/2409474

Domanda

Perché alcuni processi avviati dalla riga di comando sul mio di Windows di blocco macchina / buffer tutta la loro produzione se viene reindirizzato e altri no?

Esempio: tracert non blocca uscita / buffer come è scritto. Se si esegue:

tracert ponyoverflow.com > output.txt

... il file output.txt cresce nel tempo. Questo è completamente come mi sarei aspettato cose si comportino.

Ma, sto cercando di lavorare con il prodotto software di un potenziale fornitore ( iSpring SDK , se si deve sapere) e sembra di tamponare l'output completo fino a quando il processo è finito. Quello che trovo confusione è che quando questo software viene eseguito dalla riga di comando l'uscita viene frammentario, linea per linea, come previsto.

Perché c'è una differenza di comportamento tra chiamandolo con e senza il reindirizzamento di uscita?

Follow-up domande varie:

  • È questo comune e / o standard nel mondo della programmazione riga di comando di Windows?
  • C'è qualcosa che posso fare per afferrare il
  • Come faccio a comunicare esattamente, in gergo programmatore di Windows, per iSpring gente come penso il loro software dovrebbe comportarsi nella riga di comando?

Non sono sicuro di quanto sia importante, ma tutto questo la sperimentazione di mine sta accadendo su una macchina Windows 7 Home Premium a 64 bit.

È stato utile?

Soluzione

(La gente a iSpring sono stati molto più veloce rispondendo a me richieste di quanto avrei potuto sognato. Spot on. Ecco la loro risposta ai 'perché' di seguito.)

Lo standard output in C ++ è tamponato per impostazione predefinita. La dimensione del buffer è di circa 4 KB. Il tampone viene lavato quando l'applicazione termina. I dati scritti sullo standard output non vengono memorizzati quando standard output è collegata con una console.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top