Hilfsfunktionen
Aus StudiWiki
Inhaltsverzeichnis |
[bearbeiten] Vor dem Terminieren alle Jobs entfernen
Danach kann der Scheduler terminieren.
void remjobs(struct jobtable * table){ /* remove all jobs */ while (table->numJobs > 0){ remJob(table, &(table->jobs[table->numJobs -1])); } }
[bearbeiten] maxcount von der bash ausrechnen lassen
zum testen, ob die summe von count auch korrekt ist, in der bash:
X=0;for A in $(./programm|awk '{print$6}') ; do X=$(($X+$A)); done;echo $X
eingeben, ergebnis sollte MAXCOUNT sein. Der Aufruf erwartet die zu addierende Zahl nach dem 5. Leerzeichen, falls dort keine Zahl steht, funktioniert der Aufruf natürlich nicht.
[bearbeiten] ipc_clean.sh
Bash-Skript zum aufräumen ungenutzter Semaphore und Shared-Memory-Segmente. Benutzung wie immer auf eigene Gefahr. Da ipcs keine Auskunft darüber gibt, ob Semaphore noch benutzt werden, löscht das Skript einfach alle.
#!/bin/bash ################################################################ # remove all shared memory segments with no associated process # ################################################################ # remove the first lines of ipcrs -m X=$(ipcs -m|wc -l) IPCS=$(ipcs -m|tail -n $((X-3))|tr -s " " _) echo -e "\nlooking for unused shared memory segments" echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" # check, if nattch is 0 and remove the shared memory segment for A in $IPCS do NATTCH=$(echo $A|awk -F _ '{print $6}') ID=$(echo $A|awk -F _ '{print $2}') if (($NATTCH==0)); then echo -e "\tremoving shm id $ID with $NATTCH associated processes" ipcrm -m $ID #>&/dev/null # <- Ausgabe nach /dev/null umleiten fi done echo -e "done\n" ################################ # remove all(!) semaphore sets # ################################ # remove the first lines of ipcrs -s X=$(ipcs -s|wc -l) IPCS=$(ipcs -s|tail -n $((X-3))|tr -s " " _) echo "looking for semaphore sets" echo "^^^^^^^^^^^^^^^^^^^^^^^^^^" # remove all semaphore sets for A in $IPCS do ID=$(echo $A|awk -F _ '{print $2}') echo -e "\tremoving semaphor with id $ID" ipcrm -s $ID #>&/dev/null # <- Ausgabe nach /dev/null umleiten done echo -e "done\n"
[bearbeiten] util.c:cleanexit()
In der cleanexit-Funktion kann man alle Aufräumarbeiten (Ressourcen und Variablen freigeben, Fehlermeldungen ausgeben, etc) durchführen, die beim Beenden des Servers anfallen.
void cleanexit(int status){ if (status!=EXIT_SUCCESS) perror("error (from cleanexit)"); exit(status); }
[bearbeiten] util.c:mk_dir_p()
Skizze für eine Funktion ala mkdir -p (erstellt wenn nötig übergeordnete Verzeichnisse). Wenn's beliebt, können noch Fehlerbehandlung und Rechte nachgerüstet werden:
int mk_dir_p(char *path){ char dir[MAX_PATH_LEN]; int i = 0; if (path==NULL){ return -1; } dir[0] = path[0]; while ((dir[i] != '\0') && (i < MAX_PATH_LEN)){ i++; dir[i] = path[i]; dir[i + 1] = '\0'; if (dir[i] == '/'){ mkdir(dir,0740); } } mkdir(dir,0740); return 0; }
