Hallo Leute,
ich studiere Informatik und wir fangen gerade mit Betriebssystemen an. Leider war ich in den ersten zwei Wochen krank und verzweifle
deshalb an den ersten zwei Übungen. Die Übungen sind für die Klausurzulassung relevant.Wäre nett falls ihr mir weiterhelfen könntet. Bis jetzt haben wir nur Java programmiert und C ist komplett neu für mich. Bei den Übungen geht es um Kind-Prozesse. Mein Problem ist, dass es weder Folien noch ein Skript zu der Vorlesung gibt, wenn man also krank war ist man ziemlich aufgeschmissen. Für echte Programmierer sind die Aufgaben wahrscheinlich ein Witz. Hier die Aufgabe:
Kommentiert habe ich das Programm um es besser zu verstehen. Falls da etwas falsch sein sollte bitte auch bemängeln.
Aufgabe 1:
Frage:
Bei einem ersten Aufruf des Programms soll die Ausgabe auf dem Bildschirm erscheinen. Rufen
Sie das Programm sodann nochmals auf, wobei Sie die Ausgabe in eine Datei umlenken. Gibt es
Unterschiede in der Ausgabe? Falls ja, warum?
Ausgabe im Terminal/StdOut:
Ausgabe umgeleitet in aufgabe1.txt:
Anscheinend hat es etwas mit pipes zu tuen, aber ich weiß noch nicht wie die funktionieren, noch was eine pipe wirklich ist.
Für alle die sich die Mühe machen mir zu helfen schon einmal ein großes Dankeschön.
ich studiere Informatik und wir fangen gerade mit Betriebssystemen an. Leider war ich in den ersten zwei Wochen krank und verzweifle
deshalb an den ersten zwei Übungen. Die Übungen sind für die Klausurzulassung relevant.Wäre nett falls ihr mir weiterhelfen könntet. Bis jetzt haben wir nur Java programmiert und C ist komplett neu für mich. Bei den Übungen geht es um Kind-Prozesse. Mein Problem ist, dass es weder Folien noch ein Skript zu der Vorlesung gibt, wenn man also krank war ist man ziemlich aufgeschmissen. Für echte Programmierer sind die Aufgaben wahrscheinlich ein Witz. Hier die Aufgabe:
Kommentiert habe ich das Programm um es besser zu verstehen. Falls da etwas falsch sein sollte bitte auch bemängeln.
Aufgabe 1:
Code:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int glob = 6;
char buf[] = "a write to stdout\n";
int main(void){
int var;
pid_t pid;
var = 88;
// Check for Write Error, write the String buf
if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)
perror("write error");
// print statement before fork()
printf("before fork\n");
// calling fork() and checking for a fork-error
if ( (pid = fork()) < 0)
perror("fork error");
// no error occured, if pid is 0 than you are in the child process
// incrementing glob and var
else if (pid == 0) {
glob++;
var++;
// if you are not in the child process you are in the parent process
// sleep 2 seconds
} else
sleep(2);
// print pid glob and var
printf("pid = %d, glob =%d, var = %d\n", getpid(), glob, var);
// exit the programm with no error
exit(0);
}
Bei einem ersten Aufruf des Programms soll die Ausgabe auf dem Bildschirm erscheinen. Rufen
Sie das Programm sodann nochmals auf, wobei Sie die Ausgabe in eine Datei umlenken. Gibt es
Unterschiede in der Ausgabe? Falls ja, warum?
Ausgabe im Terminal/StdOut:
Code:
a write to stdout
before fork
pid = 24553, glob =7, var = 89
pid = 24552, glob =6, var = 88
Ausgabe umgeleitet in aufgabe1.txt:
Code:
a write to stdout
before fork
pid = 24423, glob =7, var = 89
before fork
pid = 24422, glob =6, var = 88
Anscheinend hat es etwas mit pipes zu tuen, aber ich weiß noch nicht wie die funktionieren, noch was eine pipe wirklich ist.
Für alle die sich die Mühe machen mir zu helfen schon einmal ein großes Dankeschön.