Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Ausgabe der Konsole einlesen?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
14.01.2007, 13:02 Uhr
Kest
saint


Also, mit 'stdout = cout' hab ich folgendes gemeint:
in C gibt's ja keine Classen, also nur Funktionen.
in C++ gibt's Ausgabe-Streams. 'cout' macht das gleiche wie fprintf(stdout, "...");. Aber 'cout' ist was ganz anderes als 'stdout' und zwar eine Classe.

z.B.:
fprintf(stdout, "blablabla");
macht das gleiche wie
cout << "blablabla";

fprintf(stderr, "blablabla");
macht das gleiche wie
cerr << "blablabla";

in deinem Beispiel ist 'out = stdout' falsch.


Man hätte das vielleich so machen können:

C++:
#include <iostream>
#include <fstream>

using std::fstream;
using std::ios;
using std::cout;

int main()
{
    system("dir>dir.txt");
    
    fstream out("dir.txt", ios::in);        // out ist einfach der Name
    
    char zeich;
    while(out.get(zeich))
                         cout.put(zeich);   // der Inhalt wird ausgegeben.
                               //man kann ihn auch abspeichern oder so
    
    out.close();
    
    return 0;
}




Aber mit Pipes ist natürlich besser.
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.01.2007, 22:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da gehst du aber davon aus das 1. du in dem Arbeitsverzeichnis schreiben darfst, 2. der Befehl dir auf stdout schreibt und 3. die benutzte shell redirects (das > ) unterstützt.

Darum für nur lesende oder nur schreibende Zugriffe: popen
Für lesende und schreibende Zugriffe: pipe

(Oder dann halt unter Windows die spezifischen Sachen, siehe der andere Post bzgl dem Thema!)
--
class God : public ChuckNorris { };

Dieser Post wurde am 14.01.2007 um 22:02 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
15.01.2007, 00:09 Uhr
~Xenon
Gast


Okey also ich hab mir das mit _popen() mal angeguckt und hab jetzt versucht einen Remote-Server zu schreiben (NOCH keine Verschlüsselung) aber er funktioniert nicht:


C++:
#include <iostream>
#include <winsock.h>
#include <stdio.h>

using namespace std;

int befehl(int sock2,char *buffer){

   char   psBuffer[128];
   FILE   *pPipe;
   cout<<"pPipe initialisiert..."<<endl;
   pPipe = _popen(buffer,"r");
   cout<<"pPipe: popen() = success = pPipe geöffnet!"<<endl;
   if(pPipe == NULL){
   send(sock2,"error, Befehl nicht gefunden",5,0);
   cout<<"Error occured aborting ..."<<endl;
   return 0;
   }
   cout<<"Hole ausgegebene Daten..."<<endl;
   while(!feof(pPipe))
   {
     fgets(psBuffer, 128, pPipe);
     send(sock2,psBuffer,strlen(psBuffer),0);
   }
   cout<<"..geholt !"<<endl;
   _pclose(pPipe);
   cout<<"Schließe pPipe, pclose() = success!"<<endl;
   return 1;
}


int main(int argc, char* argv[])
{
WSAData wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);
cout<<"WSAStartup() = perfect !"<<endl;

int sock=socket(AF_INET,SOCK_STREAM,0);
cout<<"Socket() = erstellt !"<<endl;
sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(8765);
my_addr.sin_addr.s_addr = INADDR_ANY;

bind(sock,(sockaddr*)&my_addr,sizeof(&my_addr));
cout<<"bind() = erfolgreich !"<<endl;

cout<<"listen() = initialisieren ...\nlisten() :";
listen(sock,2);
cout<<"Eingegangene Verbindung oder Mißglueckt"<<endl;

sockaddr_in remote_addr;
int size=sizeof(&remote_addr);

char buffer[100]="";
int sock2=accept(sock,(sockaddr*)&remote_addr,&size);
cout<<"accept() = erfolgreich !"<<endl;
while(1){
recv(sock2,buffer,100,0);
cout<<"daten "<<buffer<<endl;
befehl(sock2,buffer);
}
WSACleanup();
}



Also bei mir is der Fehler das er das listen(); einfach überspringt und gleich zu der Schleife kommt !!!????
dadurch wird mein System etwas überlastet und ich kann nix mehr anklicken


Wäre dankbar für fehlerfindung + Analyse

mfg Xenon^^
____________________________________-MinPC-:
AMD Athlon 64 X2 Dual Core 4200+
geForce 6200 256MB
160 GB Sata,
6 USB,
1 DVD Brenner,
1000 MB Netzwerkkarte,

wenn der hängt weß ick och nich weiter ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
15.01.2007, 11:14 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja listen setzt das socket nur in den modus, er wartet dann bei accept. ansonsten solltest du prüfen was dir accept, bind und listen liefert.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
15.01.2007, 16:30 Uhr
~Xenon
Gast


Ok hab den Fehler gefunden hatte den Zeiger auf die Größe der sockaddr_in rem_addr;
war falsch deklariert ^^ jetzt Funktioniert es

Danke wenn ich mal wieder Fragen habe komm ich vorbei

mfg Xenon!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: