[konsola windows] Przekierowanie I/O.

0

Czy jest jakaś możliwość przekierowania wyjścia jednego programu tak, aby robił za wejście drugiego?
Trochę szperałem, natknąłem się na pipe'y, operator "|" w konsoli, ale wszytko jest dla mnie bardzo zawiłe...

Zainteresowałem sie tym z dwóch powodów:

  1. mechanizm przeprowadzania turnieju ITPW
  2. jakiś własny prosty dodatek do apacha (jak np. php, tu pytanie jak apache sie z php komunikuje?)
0

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true
czy to nie oznacza że można w konsoli odpalić dwa programy żeby się komunikowały... niestety ten opis na msdnie nie jest dosyć jasny dla mnie...
próbowałem tak: program1.exe | program2.exe
ale jakoś nie do końca to działało

0

To widocznie coś jest nie tak z tymi programami. Bo ten operator, tak użyty MUSI działać. Podaj więcej szczegółów.

0

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.

0

ok, wielkie dzięki. Nieco zrozumiałem i nawet działa. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1