Universität Ulm -Sektion Angewandte Informationsverarbeitung
4.Übungsblatt (18.05.99 bis 01.06.99)
zur Vorlesung Systemnahe Software II (SS 99)
Aufgabe 1 (10 Punkte)
Implementieren Sie die UNIX-C-Funktionen FILE *popen(char *cmd, char *mode) und int
pclose(FILE *fp). (Was machen die? Siehe man popen oder kommt in die Übungen :-))
Sie können bei Aufgabe 1 - im Gegensatz zu Aufgabe 2 - davon ausgehen, daß popen() nur einmal
(gleichzeitig) in dem aufrufenden C-Programm aktiv ist. So wie im nachstehendem Beispiel:
#include <stdio.h>
main()
{ FILE *fp1, *fp2;
char buf[100];
fp1 = popen("ls -la", "r");
while (fgets(buf, sizeof(buf), fp1))
printf(buf);
pclose(fp1);
fp2 = popen("sort", "w");
...
pclose(fp2);
}
Aufgabe 2 (10 Punkte)
Erweitern Sie Ihre Lösung von Aufgabe 1 dahingehend, daß popen() nun mehrmals (verschachtelt) in
einem C-Programm aufgerufen werden kann. Z.B.:
#include <stdio.h>
main()
{ FILE *fp1, *fp2;
...
fp1 = popen("ls -la", "r");
fp2 = popen("sort", "w");
...
pclose(fp1);
pclose(fp2);
...
}
Hinweis:
Die folgenden Funktionen brauchen sie sicher, bzw. helfen Ihnen zu einer "einfachen" Lösung:
execl(), dup(), fdopen(), fileno(), waitpid()
Hier finden Sie die Beispiele aus den Übungen.