x0r
Bitschubser
Mahlzeit,
ich will eine API für das CGI entwickeln um z.Bsp.: start/stop-Scripte anstoßen zu können, Dateien zu erzeugen usw....
Hilfreich, wenn man die Ausgaben der Anwendung zur Verfügung hat um das Ergebnis irgendwie zu visualisieren. Hab daher versucht zunächst die Ausgaben in txt-Dateien zu streamen und anschließend diese mittels filepointern ausgelesen.
Jetzt möchte ich aber auch Pipes zwischen den Anwendungen aufbauen, und da wäre ja proc_open() eine gute Wahl, da ich ja auch schreibend auf die Standardeingabe zugreifen kann. Der Einfachheit halber habe ich zunächst versucht mit popen()
ein Shellcommando abzusetzen ($/bin/ls -l), und dessen Ausgabe mittels fgets() in einen Puffer zu überführen der mir dann eben die Rückgabe als Klartext präsentiert.
Hier mal ein Schnippslet:
soweit sogut, hier die Initialisierung des Puffer und die Überführung...
So die Ausgabe ist aber jedesmal 'NULL', dabei sollte doch zumindes sowas wie "/bin/ls -l" eigentlich kein Problem darstellen ...
Hab ich mich mit dem fgets() vielleicht vertan ?!
Danke im Vorraus, MfG
ich will eine API für das CGI entwickeln um z.Bsp.: start/stop-Scripte anstoßen zu können, Dateien zu erzeugen usw....
Hilfreich, wenn man die Ausgaben der Anwendung zur Verfügung hat um das Ergebnis irgendwie zu visualisieren. Hab daher versucht zunächst die Ausgaben in txt-Dateien zu streamen und anschließend diese mittels filepointern ausgelesen.
Jetzt möchte ich aber auch Pipes zwischen den Anwendungen aufbauen, und da wäre ja proc_open() eine gute Wahl, da ich ja auch schreibend auf die Standardeingabe zugreifen kann. Der Einfachheit halber habe ich zunächst versucht mit popen()
ein Shellcommando abzusetzen ($/bin/ls -l), und dessen Ausgabe mittels fgets() in einen Puffer zu überführen der mir dann eben die Rückgabe als Klartext präsentiert.
Hier mal ein Schnippslet:
Code:
FILE* CLI_httpd(const char* cstrParam)
{
void* cstrFullCMD = (char*)malloc(strlen(cstrParam)+strlen(" 2>/dev/null")+12);
strcpy(cstrFullCMD, "/bin/ls -l ");
strcat(cstrFullCMD, cstrParam);
strcat(cstrFullCMD, " 1>/dev/null\0");
return popen(cstrFullCMD, "r\0");
}
soweit sogut, hier die Initialisierung des Puffer und die Überführung...
Code:
typedef int (*funcHandleType)(const char*); // benutzerdefinierter Typ für ein Handle auf
// Symbole in einer dynamischen Bibliothek
int main() {
funcHandleType funcHandle = dlsym(pvDLLHandle, HTTPD); // symbolhandle gewinnen
...
char* ThrdPuffer = NULL;
fgets(ThrdPuffer, (sizeof((funcHandle)(SecPuffer))+1), stdout);
printf("<br />Der Rückgabestring: %s", ThrdPuffer);
So die Ausgabe ist aber jedesmal 'NULL', dabei sollte doch zumindes sowas wie "/bin/ls -l" eigentlich kein Problem darstellen ...
Hab ich mich mit dem fgets() vielleicht vertan ?!
Danke im Vorraus, MfG