Równoczesne przekierowanie kanału wyjściowego do pliku i okna konsoli

Równoczesne przekierowanie kanału wyjściowego do pliku i okna konsoli
tariel36
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0

Witam,

Od razu mówię że nie jestem pewien czy dobrze sformułowałem temat.

Otóż zastanawiam się czy da się zrobić tak, że to co wychodzi po użyciu komendy np.

Kopiuj
system("ping wp.pl")

wychodziło równocześnie do pliku i żeby wyświetlało się w oknie konsoli.

Doszedłem do tego że jest możliwe przekazanie strumienia wyjściowego bezpośrednio do pliku w sposób:

Kopiuj
system("ping wp.pl > plik.txt");
file.open("plik.txt", ios::in | ios::out);

tylko że w tym momencie z oczywistych powodów nie wyświetla mi się to co bym chciał także w konsoli.

Ogólnie kod obecnie wygląda tak:

Kopiuj
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    fstream file;

    system("ping wp.pl > plik.txt");
    file.open("plik.dat", ios::in | ios::out);

    return 0;
}
unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
1

niesamowicie trudne do wymyślenia rozwiązanie: wyświetl zawartość pliku

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Zakładając że ma być w c++ to coś takiego chyba zadziała

Kopiuj
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    string wejscie;
    fstream file;

    wejscie=system("ping wp.pl");
    file.open("plik.dat", ios::in | ios::out);
    cout << wejscie;

    return 0;
}


 

cout wejcie wyrzuciło to na ekran, więc w stringu siedzi . Aczkolwiek zapisu do pliku nie sprawdzałem (coby coś dla ciebie zostało), połącz to z swoim programem.

tariel36
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0
unikalna_nazwa napisał(a):

niesamowicie trudne do wymyślenia rozwiązanie: wyświetl zawartość pliku

widzę że po prostu nie do końca wytłumaczyłem.

Kiedy leci mi powiedzmy ten ping, to wszystko jest zapisywane w pliku na bieżąco po przejściu komendy nie było by faktycznie problemu. Jednak gdybym np wpisał ping wp.pl -t to wtedy by leciało w nieskończoność i teoretycznie mogłbym nigdy nie wyświetlić zawartości pliku, także twoja odpowiedź nie jest niestety rozwiązaniem mojego problemu :)

@sig
Niestety nie działa twoim sposobem.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx
W startup info masz:
HANDLE hStdOutput;
HANDLE hStdError;
możesz tam wstawić pipe:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365152%28v=vs.85%29.aspx
lub np podstawić uchwyt stdin swojej konsoli.

unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
0

no to jeśli chcesz wyświetlać na bieżąco to na bieżąco musisz to przechwytywać
jak dajesz > plik to wszystko idzie tylko do tego pliku
niestety nie da się zduplikować strumienia w stylu >plik1 >plik2

wykorzystaj http://pstreams.sourceforge.net/ lub podobne rozwiązanie i na bieżąco odbieraj wyjście z aplikacji i zapisuj jednocześnie do pliku już w c++

_13th_Dragon napisał(a):

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx
W startup info masz:
HANDLE hStdOutput;
HANDLE hStdError;
możesz tam wstawić pipe:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365152%28v=vs.85%29.aspx
lub np podstawić uchwyt stdin swojej konsoli.

wydaje mi się że tworząc pipe równie dobrze może po prostu napisać

ping example.com > NazwaPipea

?

tariel36
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0

okej, dzięki wszystkim jak na razie za odpowiedzi, pokombinuje i ewentualnie się jeszcze odezwę.

unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
0

btw jeżeli naprawdę odpalasz tylko pinga, to najlepiej by było po prostu jakby twój program sam zajął się pingowaniem, bo takie rozwiązanie jest trochę nieładne

tariel36
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 92
0

myślałem o tym, ale jak oglądałem przykładowe programy do pingowania to stwierdziłem że wychodzi to poza moje możliwości, przynajmniej obecnie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.