C++ da msdos komutları çalıştırma

Başlatan OptimusPrime, 03 Mart 2014, 04:49:58

OptimusPrime

visual C++ da _wsystem ile msdos komutlarını çalıştırabiliyorum fakat bazı komutların cevaplarını sorgulamam gerekiyor mesela

netsh wlan start hostednetwork

bu komut çalıştırıldığında hostednetwork başlayadabilir, başlamayadabilir. normalde bu komut dos altında yazıldığında sonuç hakkında bilgi geri dönüyor. benim istediğim ise dönen bilgiyi okuyabilmek.

bunu nasıl yapabilirim???
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

Icarus

system yerine CreateProcess'i kullanırsanız giriş, çıkış ve error handle'larını belirleyebiliyorsunuz. Bunları Pipe' yapıp okuyabilir/yazabilirsiniz.

mufitsozen

en basitinden "redirection" kullanin:

        i=system ("dir >dosyalar.txt");

dosyalar.txt dosyasinda komutun ciktisini okuyabilirsiniz.

c++ ile komutun cikisina pipe edebilirsiniz.

yani:

#include <string>
#include <iostream>
#include <stdio.h>

std::string exec(char* cmd) {
    FILE* pipe = _popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
       if(fgets(buffer, 128, pipe) != NULL)
          result += buffer;
    }
    _pclose(pipe);
    return result;
}

yada bir child process yaratip.......
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.


OptimusPrime

teşekkürler. yazdıklarınızı daha denemedim arkadaşlar ama söyle bir soru var aklımda.

dos komutlarını çağırdığımda dos ekranı açılıyor haliyle peki bu yöntemler dos ekranının açılmasını engeller mi? engellemezse dos ekranı görüntülenmeden dos komutlarını nasıl işletirim???
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

SpeedyX

Dos ekranı açılmaz diye düşünüyorum ama senin yaptığın uygulama zaten console app değil mi? Ozaman bir dos ekranı görünecektir. Hidden açabilirsin.