Persönliche Werkzeuge
Ansichten
Navigation
Werkzeuge

Hilfsfunktionen

Aus StudiWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[bearbeiten] Vor dem Terminieren alle Jobs entfernen

Danach kann der Scheduler terminieren.

  1.  
  2. void remjobs(struct jobtable * table){
  3. /* remove all jobs */
  4. while (table->numJobs > 0){
  5. remJob(table, &(table->jobs[table->numJobs -1]));
  6. }
  7. }
  8.  

[bearbeiten] maxcount von der bash ausrechnen lassen

zum testen, ob die summe von count auch korrekt ist, in der bash:

  1. 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.

  1. #!/bin/bash
  2. ################################################################
  3. # remove all shared memory segments with no associated process #
  4. ################################################################
  5.  
  6. # remove the first lines of ipcrs -m
  7. X=$(ipcs -m|wc -l)
  8. IPCS=$(ipcs -m|tail -n $((X-3))|tr -s " " _)
  9. echo -e "\nlooking for unused shared memory segments"
  10. echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
  11. # check, if nattch is 0 and remove the shared memory segment
  12. for A in $IPCS
  13. do
  14. NATTCH=$(echo $A|awk -F _ '{print $6}')
  15. ID=$(echo $A|awk -F _ '{print $2}')
  16. if (($NATTCH==0)); then
  17. echo -e "\tremoving shm id $ID with $NATTCH associated processes"
  18. ipcrm -m $ID #>&/dev/null # <- Ausgabe nach /dev/null umleiten
  19. fi
  20. done
  21. echo -e "done\n"
  22.  
  23. ################################
  24. # remove all(!) semaphore sets #
  25. ################################
  26.  
  27. # remove the first lines of ipcrs -s
  28. X=$(ipcs -s|wc -l)
  29. IPCS=$(ipcs -s|tail -n $((X-3))|tr -s " " _)
  30. echo "looking for semaphore sets"
  31. echo "^^^^^^^^^^^^^^^^^^^^^^^^^^"
  32. # remove all semaphore sets
  33. for A in $IPCS
  34. do
  35. ID=$(echo $A|awk -F _ '{print $2}')
  36. echo -e "\tremoving semaphor with id $ID"
  37. ipcrm -s $ID #>&/dev/null # <- Ausgabe nach /dev/null umleiten
  38. done
  39. echo -e "done\n"
  40.  

[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.

  1. void cleanexit(int status){
  2. if (status!=EXIT_SUCCESS)
  3. perror("error (from cleanexit)");
  4. exit(status);
  5. }
  6.  


[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:

  1. int mk_dir_p(char *path){
  2. char dir[MAX_PATH_LEN];
  3. int i = 0;
  4.  
  5. if (path==NULL){
  6. return -1;
  7. }
  8. dir[0] = path[0];
  9. while ((dir[i] != '\0') && (i < MAX_PATH_LEN)){
  10. i++;
  11. dir[i] = path[i];
  12. dir[i + 1] = '\0';
  13. if (dir[i] == '/'){
  14. mkdir(dir,0740);
  15. }
  16.  
  17. }
  18. mkdir(dir,0740);
  19. return 0;
  20. }
  21.