Ergebnisse von system() auslesen



  • cuser1 schrieb:

    Jedoch ist das eigentliche Problem nicht "war die letzte operation erfolgreich?" sondern ich will den gesamten, vom Programm ausgegebenen Text in meinem C-programm zur verfügung haben.

    Das kann C nicht. Du musst das Betriebssystem fragen. Welches darfs denn sein?
    🙂



  • µngbd schrieb:

    Welches darfs denn sein?

    Sieht nach Windows aus. Also einfach zurücklehnen und abwarten, man wird dich verschieben.
    🙂



  • µngbd schrieb:

    Welches darfs denn sein?

    Sieht nach Windows aus. Also einfach zurücklehnen und abwarten, man wird dich verschieben.
    🙂



  • CreateProcess() mit STARTUPINFO Struktur sollte dir weiterhelfen.



  • Windows

    *zurücklehn*



  • cuser1 schrieb:

    Windows

    *zurücklehn*

    Anscheinend willst du dir ja nicht helfen lassen, sonst hättest du nach den ggb. Infos gesucht.



  • Dank tabbed browsing hab ich deinen post nicht gesehen.

    Vielen Dank für die Info.
    Bin jetzt erstmal auf MSDNAA und stelle fest, dass es offensichtlich keine einfache Lösung des Problems gibt.
    Mal schaun wie weit ich mit meinen C-Kentnissen komme.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.





  • Hi

    Doch das kann man zbsp. mit unnamed pipe's machen !

    Hier ein kleiner bsp. Code den ich aus einem meiner Project habe, und für dich ein wenig zurecht rücken frickeln muss. Also mich nicht weichklopfen wen irgendwelche variablen nicht Stimmen oder weis ich was. Doch werde schauen das alles recht ist.

    Edit: Das wird ein bisschen Zeitaufwendig wen ich alles anpassen und schön machen möchte. Daher muss das reichen.
    über unnamed pips kannst du dich bei MSDN informieren. Ansonnsten kannst du ja fragen.

    unsigned long long ReadOfPipeFTShell(char *command)
    {
    
    	/* Structs */
    	SECURITY_ATTRIBUTES secattrib;
    	HANDLE rPipe;
    	HANDLE wPipe;
    	STARTUPINFO sInfo;
    	PROCESS_INFORMATION pInfo;
    
    	/* Process buffer's */
    	char process[]={"cmd.exe /K "};
    	char commandbuf[2048];
    	char buf[1];
    	unsigned long reDword=0;
    	unsigned long long len=0;
    	int res;
    
    	/* Struktur SEC_ATT definieren for Pipe */
    	ZeroMemory(&secattrib,sizeof(secattrib));
    	secattrib.nLength = sizeof(secattrib);
    	secattrib.bInheritHandle = TRUE;
    
    	/* Create Pipe */
    	CreatePipe(&rPipe ,&wPipe ,&secattrib ,0);
    
    	/* StartupInfo struktur definieren für Process */ 
    	ZeroMemory(&sInfo,sizeof(sInfo)); 
    	ZeroMemory(&pInfo,sizeof(pInfo));
    	sInfo.cb		=	sizeof(sInfo);
    	sInfo.dwFlags	=	STARTF_USESTDHANDLES;
    	sInfo.hStdInput	=	NULL; 
    	sInfo.hStdOutput=	wPipe; 
    	sInfo.hStdError	=	wPipe;
    	strcpy(commandbuf, process);
    
    	/* Buffer overflow protect */
    	if(strlen(command)>1024) {
    		strncat(commandbuf ,command ,1024);
    	} else {
    		strncat(commandbuf ,command ,strlen(command));
    	}
    
    	/* Create Process */
    	CreateProcess( 0 ,commandbuf ,0 ,0 ,TRUE ,NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW ,0 ,0 ,&sInfo ,&pInfo );
    
    	/* Nach schreiben des Output in wPipe, Pipe schliessen */
    	CloseHandle(wPipe);
    
    	/* Read from Pipe */
    	do
    	{
    		res = ReadFile(rPipe,buf ,1 ,&reDword ,0);
    		printf("%c",buf);
    
    	}
    	while(res);
    
    	/* Read pipe close */
    	CloseHandle(rPipe);
    
    	/* Close process-handles */
    	CloseHandle(pInfo.hProcess);
    	CloseHandle(pInfo.hThread);
    
    	/* Return Buffer size */
    	return len;
    }
    

    lowbyte


Anmelden zum Antworten