diff options
author | Stefan Zabka <zabkaste@hu-berlin.de> | 2020-05-13 12:16:35 +0200 |
---|---|---|
committer | Stefan Zabka <zabkaste@hu-berlin.de> | 2020-05-13 12:16:35 +0200 |
commit | 00dff9b1d9c3a20ce4b091e092d38f913479a5ac (patch) | |
tree | 4bc5a1af07c4e96d4354ce13a6a7fc62633a6b12 /02_exercise/prog.c | |
parent | a2ecab285195ff72fc2955b74f48751ab998809b (diff) | |
download | betriebssysteme-00dff9b1d9c3a20ce4b091e092d38f913479a5ac.tar.gz betriebssysteme-00dff9b1d9c3a20ce4b091e092d38f913479a5ac.zip |
Added all given material for exercise 2
Diffstat (limited to '02_exercise/prog.c')
-rw-r--r-- | 02_exercise/prog.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/02_exercise/prog.c b/02_exercise/prog.c new file mode 100644 index 0000000..17b727a --- /dev/null +++ b/02_exercise/prog.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include <unistd.h> + +static unsigned int hash(const void* key, size_t size) { + const char* ptr = key; + unsigned int hval; + + for (hval = 0x811c9dc5u; size --> 0; ++ptr) { + hval ^= *ptr; + hval *= 0x1000193u; + } + + return hval; +} + +static inline int roll(int sides) { + return rand() / (RAND_MAX + 1.0) * sides; +} + +int main(int argc, const char* argv[]) { + int rc, delay; + time_t now = time(0); + + /* initialize the random number generator */ + srand(hash(&now, sizeof(now))); + + /* determine exit code and time delay */ + switch (argc) { + default: + delay = atoi(argv[1]); + rc = atoi(argv[2]); + break; + + case 2: + delay = atoi(argv[1]); + rc = roll(2) - 1; + break; + + case 1: + delay = roll(10); + rc = roll(2) - 1; + break; + } + + printf("Delay: %ds, Exit Code: %d\n", delay, rc); + sleep(delay); + + return rc; +} |