Ich versuche, einen Shell-Befehl aus einem C-Programm auszuführen.Return Exec-Ausgabe aus dem Programm über Parameter-Referenz
Dafür habe ich eine Wrapper-Funktion erstellt, die den Exit-Code des Befehls selbst zurückgibt und eine Parameter-Referenzvariable verwendet, um die tatsächliche Ausgabe des Programms zurückzugeben.
Die exec-Funktion Wrapper sieht wie folgt aus:
int _exec(const void *command, char **result) {
FILE *fp;
char path[1035];
char *eof;
/* Open the command for reading. */
fp = popen(command, "r");
if (fp == NULL) {
return -1;
}
while((eof = fgets(path, sizeof(path), fp)) != NULL);
/* Fill the parameter reference */
*result = strdup(path);
/* close */
pclose(fp);
return 0;
}
Der anrufende Teil wie folgt aussieht:
int result = 0;
char *tmp;
result =_exec("ls /", &tmp);
printf("%s", tmp);
Leider gibt es in der anrufenden Teil, wenn ich printf
tmp
, ist es nur die letzte Zeile enthält der Befehlsausgabe.
Irgendeine Idee, was ich falsch mache? Wie kann ich alle Zeilen int *result
und damit in tmp
bekommen?
Wenn ich 'fread' versuche, funktioniert es überhaupt nicht:' fread (* result, 1, sizeof (char *), fp); ' – lockdoc
Lesen Sie die" fread "-Dokumentation um zu wissen, was als Parameter übergeben werden soll. Der erste wird wie zuvor "Pfad" sein. In 'count' übergeben Sie die Größe Ihres Puffers,' sizeof (path) '; Es wird nicht über das Zeilenende hinaus gelesen. Eigentlich brauchen Sie die 'while' Schleife nicht, als würde sie nicht alle Daten lesen, Ihr Puffer ist sowieso voll. – atturri
Woher weiß ich, welche Arraygröße ich vor dem Lesen zum Pfad deklarieren muss? – lockdoc