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

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.

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:

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:

#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;
}
1

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

0

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

#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.

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.

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.

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

?

0

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

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

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

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