Ausgabe von aufgerufenem Programm unterdrücken



  • Hallo zusammen,

    wie kann ich die Ausgabe von "ping" auf dem Bildschirm unterdrücken? Ich benötige lediglich den Rückgabewert, welcher mir nach i_pingstatus geliefert wird.

    Habe schon mehrere Sachen ausprobiert, konnte aber lediglich die Ausgabe aus meinem Programm unterdrücken/umleiten, jedoch nicht die aus dem Programm ping.exe

    s_callping = string("ping ") + at_remote_server[i_hostcounter].str_host + string(" -n 1 -w 2000");
    p_cp = s_callping.c_str();
    
    i_pingstatus = system(p_cp);
    

    Vielen Dank im Voraus.



  • CreateProcess... / WaitForSingleObject auf hProcess, GetProcessExitCode...



  • Microsoft hätte alternativ auch Funktionen mit denen man pingen kann im Angebot:
    http://msdn.microsoft.com/en-us/library/aa366050(VS.85).aspx



  • Vielen Dank euch beiden!

    STARTUPINFO si;
        PROCESS_INFORMATION pi;
    
        //init the STARTUPINFO struct
        memset(&si,0,sizeof(si));
        si.cb=sizeof(si);
    
    sprintf(bff,"ping localhost  -n 1 -w 2000");
    
        // Start the child process.
        if( !CreateProcess(
            NULL,   // No module name (use command line)
            bff,        // Command line
            NULL,           // Process handle not inheritable
            NULL,           // Thread handle not inheritable
            FALSE,          // Set handle inheritance to FALSE
            0,              // No creation flags
            NULL,           // Use parent's environment block
            NULL,           // Use parent's starting directory
            &si,            // Pointer to STARTUPINFO structure
            &pi )           // Pointer to PROCESS_INFORMATION structure
        )
    
        {
            //printf( "CreateProcess failed (%d).\n", GetLastError() );
            return 0;
        }
    
        // Wait until child process exits.
        WaitForSingleObject( pi.hProcess, INFINITE );
    
        DWORD exitCode=0;
        if (GetExitCodeProcess(pi.hProcess, &exitCode))
        {
            cout << "exitCode: " << exitCode;
        }
        // Close process and thread handles.
        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );
    

    Fragen:
    1)
    Wie kann ich die Ausgabe unterdrücken? Zur Zeit schreibt er sie mir noch auf die Konsole.

    //printf( "CreateProcess failed (%d).\n", GetLastError() );
    

    Wie bekomme ich die zur Zeit auskommentierte Zeile zum laufen? GetLastError() ist DWORD, oder?



  • Du kannst die Ausgabe in eine Pipe umleiten:
    http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx

    DWORD ist quasi ein 32-bit unsigned integer
    WORD ist ein 16-bit unsigned integer
    Probier bei printf() mal "%u"


Anmelden zum Antworten