Odpowiem tak: każdy program posiada standardowe wejście, standardowe wyjście oraz standardowe wyjście błędów. Znak A | B w konsoli Windows oznacza, że program A wysyłając coś na standardowe wyjście, wysyła de facto na standardowe wejście programu B. W konsoli są jeszcze 3 dodatkowe symbole: A < F, A > F, A >> F. Pierwszy wysyła zawartość pliku F na wejście programu A, drugi z wyjścia A do pliku F (tryb zastępowania pliku), a trzeci z wyjścia A do pliku F (w trybie dopisywania).
Prosty przykład w konsoli wywołać polecenie:
dir %WINDIR% | find ".log" > c:\logi.txt
Przykład w Delphi (WINAPI):
{$APPTYPE CONSOLE}
uses Windows;
var c:char;
n:dword;
begin
ReadFile(GetStdHandle(STD_INPUT_HANDLE), c, 1, n, 0);
inc(c);
WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), c, 1, n, 0);
end.
Czyta znak ze standardowego wejścia, zwiększa o 1, daje na wyjście. Jeśli uruchamiając nie skierowałeś czegoś na wejście, oczekuje na wpisanie znaku z klawiatury. Jak odpalisz ten program:
program.exe
i wpiszesz 1, zwróci Ci 2, ale jak odpalisz
program.exe | program.exe
i wpiszesz 1, zwróci Ci 3, bo pierwszy zwiększy o 1 i poda na wejście drugiemu by ten zwiększył o 1.