diff --git a/20211202/es-20211202.pdf b/20211202/es-20211202.pdf index 8bb500633bf8f3585ca5e03cbc80c53d6046c3f4..ba420eb35191fb7479bcfb05f3ae86df96e6b935 100644 Binary files a/20211202/es-20211202.pdf and b/20211202/es-20211202.pdf differ diff --git a/20211202/es-20211202.tex b/20211202/es-20211202.tex index 0d9846e5d669d2b27213c5abbb783056e60d4cd7..d01a46f463c381ac8dc0f28a72d5bfa0a58ed6ee 100644 --- a/20211202/es-20211202.tex +++ b/20211202/es-20211202.tex @@ -712,7 +712,7 @@ \end{frame} -\setlength{\pdfpageheight}{48cm} +\setlength{\pdfpageheight}{49cm} \begin{frame}[fragile] @@ -878,7 +878,7 @@ \end{frame} -\setlength{\pdfpageheight}{40.5cm} +\setlength{\pdfpageheight}{45cm} \begin{frame}[fragile] diff --git a/20211202/make-zombies-1.c b/20211202/make-zombies-1.c new file mode 100644 index 0000000000000000000000000000000000000000..f7b2604f147e5efca9e2adcca5f50b8d134ccaab --- /dev/null +++ b/20211202/make-zombies-1.c @@ -0,0 +1,41 @@ +#include <stdio.h> +#include <sys/wait.h> +#include <stdlib.h> +#include <unistd.h> + +int main(void){ + pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse) + int i; // Laufvariable + + for (i = 0; i < 10; ++i) { + // Der Vaterprozess erzeugt nun einen Kindprozess, + // welcher unabh�ngig vom Vaterprozess mit der + // erneuten Ausf�hrung des Programms beginnt. + // Ein Kindprozess erzeugt keinen Fork von sich selbst. + pids[i] = fork(); + if (pids[i] == 0) { + // dann befinden wir uns in einem der 10 Kindprozesse + // Der erste Kindprozess wartet 10 Sekunden und jeder + // weitere Kindprozess wartet 1 Sekunde k�rzer als der + // vorige. + sleep(10-i); + printf ("%d BRAINS! ", i); + exit(0); // Kindprozess erfolgreich beenden + } + } + +// + // hier kommt nur der Vaterprozess vorbei + for (i = 0; i < 10; ++i){ + // Der Vaterprozess wartet nun, bis der Reihe nach jeder + // seiner 10 Kindprozesse beendet ist. Leider wird auf das + // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl + // die anderen Kinder l�ngst erfolgreich beendet wurden, + // blockiert das erste Kind eine Bereinigung der Prozesstabelle + waitpid(pids[i], NULL, 0); + } +// + +// while (1); + return 0; // Vaterprozess erfolgreich beenden +} diff --git a/20211202/make-zombies-2.c b/20211202/make-zombies-2.c new file mode 100644 index 0000000000000000000000000000000000000000..737940e90a5057377c5a8a95d49afccedf703a28 --- /dev/null +++ b/20211202/make-zombies-2.c @@ -0,0 +1,41 @@ +#include <stdio.h> +#include <sys/wait.h> +#include <stdlib.h> +#include <unistd.h> + +int main(void){ + pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse) + int i; // Laufvariable + + for (i = 0; i < 10; ++i) { + // Der Vaterprozess erzeugt nun einen Kindprozess, + // welcher unabhängig vom Vaterprozess mit der + // erneuten Ausführung des Programms beginnt. + // Ein Kindprozess erzeugt keinen Fork von sich selbst. + pids[i] = fork(); + if (pids[i] == 0) { + // dann befinden wir uns in einem der 10 Kindprozesse + // Der erste Kindprozess wartet 10 Sekunden und jeder + // weitere Kindprozess wartet 1 Sekunde kürzer als der + // vorige. + sleep(10-i); + printf ("%d BRAINS! ", i); + exit(0); // Kindprozess erfolgreich beenden + } + } + +// +// // hier kommt nur der Vaterprozess vorbei +// for (i = 0; i < 10; ++i){ +// // Der Vaterprozess wartet nun, bis der Reihe nach jeder +// // seiner 10 Kindprozesse beendet ist. Leider wird auf das +// // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl +// // die anderen Kinder längst erfolgreich beendet wurden, +// // blockiert das erste Kind eine Bereinigung der Prozesstabelle +// waitpid(pids[i], NULL, 0); +// } +// + + while (1); +// return 0; // Vaterprozess erfolgreich beenden +} diff --git a/20211202/make-zombies-3.c b/20211202/make-zombies-3.c new file mode 100644 index 0000000000000000000000000000000000000000..196e0a4f93def95ac693571b03c8f66bc198ff54 --- /dev/null +++ b/20211202/make-zombies-3.c @@ -0,0 +1,41 @@ +#include <stdio.h> +#include <sys/wait.h> +#include <stdlib.h> +#include <unistd.h> + +int main(void){ + pid_t pids[10]; // Platz für 10 Prozess-IDs (die Kindprozesse) + int i; // Laufvariable + + for (i = 0; i < 10; ++i) { + // Der Vaterprozess erzeugt nun einen Kindprozess, + // welcher unabhängig vom Vaterprozess mit der + // erneuten Ausführung des Programms beginnt. + // Ein Kindprozess erzeugt keinen Fork von sich selbst. + pids[i] = fork(); + if (pids[i] == 0) { + // dann befinden wir uns in einem der 10 Kindprozesse + // Der erste Kindprozess wartet 10 Sekunden und jeder + // weitere Kindprozess wartet 1 Sekunde kürzer als der + // vorige. + sleep(10-i); + printf ("%d BRAINS! ", i); + exit(0); // Kindprozess erfolgreich beenden + } + } + +// +// // hier kommt nur der Vaterprozess vorbei +// for (i = 0; i < 10; ++i){ +// // Der Vaterprozess wartet nun, bis der Reihe nach jeder +// // seiner 10 Kindprozesse beendet ist. Leider wird auf das +// // Kind mit der längsten Wartezeit zuerst gewartet. Obwohl +// // die anderen Kinder längst erfolgreich beendet wurden, +// // blockiert das erste Kind eine Bereinigung der Prozesstabelle +// waitpid(pids[i], NULL, 0); +// } +// + +// while (1); + return 0; // Vaterprozess erfolgreich beenden +} diff --git a/20211202/preprocessor-1.c b/20211202/preprocessor-1.c new file mode 100644 index 0000000000000000000000000000000000000000..91a99c5cead1969500264c33b346ab6e3737c719 --- /dev/null +++ b/20211202/preprocessor-1.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +#define VIER 4 + +int main (void) +{ + printf ("Die Antwort lautet: %d\n", VIER); + return 0; +} diff --git a/20211202/preprocessor-10.c b/20211202/preprocessor-10.c new file mode 100644 index 0000000000000000000000000000000000000000..e01204d4301ccb6e30455749c4606bd3c1243fff --- /dev/null +++ b/20211202/preprocessor-10.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); } +#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); } + +#define english 1 + +int main (void) +{ + if (english) + hello () + else + hallo () + return 0; +} diff --git a/20211202/preprocessor-11.c b/20211202/preprocessor-11.c new file mode 100644 index 0000000000000000000000000000000000000000..0778e33d67abaf3d04bb52fe701c0592b8d72f5d --- /dev/null +++ b/20211202/preprocessor-11.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello(x) do { printf ("Hello!\n"); printf ("World!\n"); } while (0) +#define hallo(x) do { printf ("Hallo!\n"); printf ("Welt!\n"); } while (0) + +#define english 1 + +int main (void) +{ + if (english) + hello (); + else + hallo (); + return 0; +} diff --git a/20211202/preprocessor-12.c b/20211202/preprocessor-12.c new file mode 100644 index 0000000000000000000000000000000000000000..6f5432ffa656b7308025babce6ae17b17d1cace7 --- /dev/null +++ b/20211202/preprocessor-12.c @@ -0,0 +1,28 @@ +#include <stdio.h> + +#define hello(x) \ + do \ + { \ + printf ("Hello!\n"); \ + printf ("World!\n"); \ + } \ + while (0) + +#define hallo(x) \ + do \ + { \ + printf ("Hallo!\n"); \ + printf ("Welt!\n"); \ + } \ + while (0) + +#define english 1 + +int main (void) +{ + if (english) + hello (); + else + hallo (); + return 0; +} diff --git a/20211202/preprocessor-13.c b/20211202/preprocessor-13.c new file mode 100644 index 0000000000000000000000000000000000000000..1c0a27bc4399ad7cb5be4eef22cdc0ada6d4fd49 --- /dev/null +++ b/20211202/preprocessor-13.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +#define set_answer(a,v) \ + do \ + a = v; \ + while (0) + +int main (void) +{ + int answer = 0; + set_answer (answer, 42); + printf ("Die Antwort lautet: %d\n", answer); + return 0; +} diff --git a/20211202/preprocessor-13.s b/20211202/preprocessor-13.s new file mode 100644 index 0000000000000000000000000000000000000000..2b29389c7116ade1fd8474c72c03d818019009c5 --- /dev/null +++ b/20211202/preprocessor-13.s @@ -0,0 +1,26 @@ + .file "preprocessor-13.c" + .text + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "Die Antwort lautet: %d\n" + .text + .globl main + .type main, @function +main: +.LFB11: + .cfi_startproc + subq $8, %rsp + .cfi_def_cfa_offset 16 + movl $42, %esi + leaq .LC0(%rip), %rdi + movl $0, %eax + call printf@PLT + movl $0, %eax + addq $8, %rsp + .cfi_def_cfa_offset 8 + ret + .cfi_endproc +.LFE11: + .size main, .-main + .ident "GCC: (Debian 8.3.0-6) 8.3.0" + .section .note.GNU-stack,"",@progbits diff --git a/20211202/preprocessor-14.c b/20211202/preprocessor-14.c new file mode 100644 index 0000000000000000000000000000000000000000..b1558f58a621c73abbb056296bc13a332a554e68 --- /dev/null +++ b/20211202/preprocessor-14.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +void set_answer (int *a, int v) +{ + *a = v; +} + +int main (void) +{ + int answer = 0; + set_answer (&answer, 42); + printf ("Die Antwort lautet: %d\n", answer); + return 0; +} diff --git a/20211202/preprocessor-14.s b/20211202/preprocessor-14.s new file mode 100644 index 0000000000000000000000000000000000000000..ee84b203efd614679f58360601e4cf65ffde2e37 --- /dev/null +++ b/20211202/preprocessor-14.s @@ -0,0 +1,36 @@ + .file "preprocessor-14.c" + .text + .globl set_answer + .type set_answer, @function +set_answer: +.LFB11: + .cfi_startproc + movl %esi, (%rdi) + ret + .cfi_endproc +.LFE11: + .size set_answer, .-set_answer + .section .rodata.str1.1,"aMS",@progbits,1 +.LC0: + .string "Die Antwort lautet: %d\n" + .text + .globl main + .type main, @function +main: +.LFB12: + .cfi_startproc + subq $8, %rsp + .cfi_def_cfa_offset 16 + movl $42, %esi + leaq .LC0(%rip), %rdi + movl $0, %eax + call printf@PLT + movl $0, %eax + addq $8, %rsp + .cfi_def_cfa_offset 8 + ret + .cfi_endproc +.LFE12: + .size main, .-main + .ident "GCC: (Debian 8.3.0-6) 8.3.0" + .section .note.GNU-stack,"",@progbits diff --git a/20211202/preprocessor-2.c b/20211202/preprocessor-2.c new file mode 100644 index 0000000000000000000000000000000000000000..c876b5935fa297b351efb2424d4b374df6c789df --- /dev/null +++ b/20211202/preprocessor-2.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +#define VIER 4); + +int main (void) +{ + printf ("Die Antwort lautet: %d\n", VIER + return 0; +} diff --git a/20211202/preprocessor-3.c b/20211202/preprocessor-3.c new file mode 100644 index 0000000000000000000000000000000000000000..17d6f174c8c837ad514ea04a825c45d8b8a816cb --- /dev/null +++ b/20211202/preprocessor-3.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +#define ZWEIMAL(X) 2 * X + +int main (void) +{ + printf ("Die Antwort lautet: %d\n", ZWEIMAL (23)); + return 0; +} diff --git a/20211202/preprocessor-4.c b/20211202/preprocessor-4.c new file mode 100644 index 0000000000000000000000000000000000000000..2fa584c9e9de7d9aa14152d223cd2f9cb9f7363a --- /dev/null +++ b/20211202/preprocessor-4.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +#define SECHS 1 + 5 +#define NEUN 8 + 1 + +int main (void) +{ + printf ("Die Antwort lautet: %d\n", SECHS * NEUN); + return 0; +} diff --git a/20211202/preprocessor-5.c b/20211202/preprocessor-5.c new file mode 100644 index 0000000000000000000000000000000000000000..f5bd2e52509346c794fbd051801caf03ff2d26a1 --- /dev/null +++ b/20211202/preprocessor-5.c @@ -0,0 +1,10 @@ +#include <stdio.h> + +#define SECHS (1 + 5) +#define NEUN (8 + 1) + +int main (void) +{ + printf ("Die Antwort lautet: %d\n", SECHS * NEUN); + return 0; +} diff --git a/20211202/preprocessor-6.c b/20211202/preprocessor-6.c new file mode 100644 index 0000000000000000000000000000000000000000..e2b5e155366db5d304822c8ec3c2e53e5bfe34d8 --- /dev/null +++ b/20211202/preprocessor-6.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello printf ("Hello!\n") +#define hallo printf ("Hallo!\n") + +#define english 1 + +int main (void) +{ + if (english) + hello; + else + hallo; + return 0; +} diff --git a/20211202/preprocessor-7.c b/20211202/preprocessor-7.c new file mode 100644 index 0000000000000000000000000000000000000000..673d2a3da8dc0427f6b2729f57e3f4840bd7afde --- /dev/null +++ b/20211202/preprocessor-7.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello(x) printf ("Hello!\n") +#define hallo(x) printf ("Hallo!\n") + +#define english 1 + +int main (void) +{ + if (english) + hello (); + else + hallo (); + return 0; +} diff --git a/20211202/preprocessor-8.c b/20211202/preprocessor-8.c new file mode 100644 index 0000000000000000000000000000000000000000..ab6f6599c53a607155e3954d21d353aa37664a8a --- /dev/null +++ b/20211202/preprocessor-8.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello(x) printf ("Hello!\n"); printf ("World!\n"); +#define hallo(x) printf ("Hallo!\n"); printf ("Welt!\n"); + +#define english 1 + +int main (void) +{ + if (english) + hello (); + else + hallo (); + return 0; +} diff --git a/20211202/preprocessor-9.c b/20211202/preprocessor-9.c new file mode 100644 index 0000000000000000000000000000000000000000..5258c1a54ebef882dd7eae3abdeee46eb0cfed09 --- /dev/null +++ b/20211202/preprocessor-9.c @@ -0,0 +1,15 @@ +#include <stdio.h> + +#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); } +#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); } + +#define english 1 + +int main (void) +{ + if (english) + hello (); + else + hallo (); + return 0; +}