execl() - system() >> anderes Programm ausführen und Ausgabe in Array
-
Also,
Ich möchte folgendes machen: Mein C programm soll "ls -l" ausführen, das habe ich auch schon mit system() geschafft, nun möchte ich aber das die Ausgabe nicht auf meiner Konsole erscheint sondern in ein Array geht (Zeilenweise) damit ich es dann weiterverarbeiten kann... Nun habe ich keinen Plan wie ich das anstellen soll, kennt ihr da vlt. eine Lösung?
Mit execl() habe ich es schon probiert aber das ist auf nicht dafür geeignet, vor allem weil mein Programm danach beendet wird
Danke schon im voraus!
Mfg
-
du kannst man: popen(3) nehmen. Wenn du aber mit der exec* Familie arbeiten willst, dann darfst du nicht vergessen eine Pipe mit man: pipe(2) zu erzeugen und dann mittels man: dup(2) bzw. man: dup2(2) die Dateideskriptoren für STDIN/STDOUT usw. im Kindprozess zu duplizieren.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hey, kannst du mir vlt ein Beispiel zu popen geben?
THX
Mfg
-
also on the fly:
#include <stdio.h> int main(void) { FILE fp*; fp = popen("ls -l", "r"); if(fp == NULL) { perror("popen"); return 1; } /* aus fp lesen, als wäre es eine Datei. */ pclose(fp); return 0; }
-
Ansonsten würde ich es vielleicht doch mit system() machen, und das Ergebnis in eine Datei schreiben lassen. Diese dann mit fopen() öffnen und mit fgets() den Inhalt in einen String auslesen. Den String dann stückchenweise zerlegen und Strukturmembers zuweisen.
-
Popen ist eine Möglichkeit. Die Ausgabe in eine Datei zu lenken ist eine Lösung. Noch umständlicher und schlechter könntest Du es lösen, wenn Du versuchst noch eine Datenbank für das Problem heranzuziehen.

Nein, im Ernst - ich würde mir mal die man-page zu opendir(3) und stat(2) anschauen. Die Ausgabe von "ls -l" zu parsen ist in einem C-Programm definitiv der falsche Weg.