C Brauche leider Unterstützung bei den "Hausaufgaben"

MTR

Cadet 4th Year
Registriert
Nov. 2006
Beiträge
108
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:
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);
}
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:
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. :D
 
Fork Info (Return Type Abschnitt ist interessant):
http://www.thegeekstuff.com/2012/05/c-fork-function/

Ach ja, ich würde eher die englischen Begriffe verwenden, also child process und nicht Kind-Prozess. Ich finde das erleichtert die Kommunikation.

Noch ein Google Tipp: Wenn man nach Programmierinfos sucht kann es helfen explizit google.com und nicht google.de zu benutzen.
 
Zuletzt bearbeitet:
@Hancock
Da hast du wohl recht.

Usually, stdout is line-buffered. In other words, as long as your printf argument ends with a newline, you can expect the line to be printed instantly.

@MTR
Sorry, ich hatte die Frage nicht genau genug gelesen.
 
Wow, vielen Dank für die schnellen Antworten. Damit habe ich nicht gerechnet. Das hilft mir sehr. :)
 
Zurück
Oben