Funkcja system("...");

0

Witam,
Czy jest jakiś sposób, aby otrzymać to co zwróci na konsoli funkcja system i zapisać to sobie do tablicy znaków na przykład? Bo mam zrobić klient-serwer telnetu i chcę, że jak się w kliencie wpisze "dir C:" to serwer wykona system("dir C:\"); i rezultat (listę plików) odeśle do klienta.

0

Pod linuxem masz popen http://linux.die.net/man/3/popen który robi dokładnie to co byś chciał. Nie wiem czy windows ma coś podobnego, pewnie ma.

1

std::string CServer::exec_CMD(char* cmd)
{
FILE* pipe = _popen(cmd, "r");
if (!pipe) return "ERROR";

char buffer[128];
std::string result = "";
while(!feof(pipe)) 
{
    if(fgets(buffer, 127, pipe) != NULL)
	result += buffer;

}
_pclose(pipe);
return result;

}

Jakiś czas temu napisałem właśnie taki program :)

0

Też w zasadzie napisałem kiedyś coś podobnego, chociaż trochę bardziej rozbudowanego -> można łączyć klienta z dowolną ilością demonów (i oczywiście do każdego demona może być połączona dowolna ilość klientów) i wykonywać zdalne polecenia na wielu maszynach jednocześnie. I korzystałem w tym celu właśnie z popen()

0

Nie interesują mnie rozwiązania dla Linuxa, tylko dla Windows. Nadal proszę o pomoc.

0
  1. @arasso12 pokazał przykład z _popen
    lub
  2. CreateProcess (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499.aspx)
0

Dziękuję za odpowiedzi, szczególnie @arasso12 i @adf88 .

0

Tylko popen otwiera pipe'a, który jest jednostronny. Jak odtworzyć do obu na raz?

0

Użyć CreateProcsess.

@_0x666_ ładnie opakował wszystko w streambuf:
uruchamianie procesu potomnego, używanie pipe

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