ein Kapitel zurück                                           ein Kapitel weiter

Mit den Funktionen.....

#include <stdio.h>
void perror(const char *meldung);

...und...

#include <string.h>
char *strerror(int fehler_nummer);

...können sie wenn bei Systemfunktionen Fehler auftreten diesen auf dem Bildschirm ausgeben. Für diese beiden Funktionen ist dafür in der Headerdatei <errno.h> folgende Variable definiert.....

extern int errno;

Der Wert den diese Variable annehmen kann ist ebenfalls in dieser Headerdatei <errno.h> definiert. Jede dieser Konstanten beginnt mit dem Buchstaben 'E'....

  • EZERO     Fehler 0
  • EINVFNC      Ungültige Funktionsnummer
  • ENOFILE     Datei nicht gefunden
  • ENOPATH     Pfad nicht gefunden
  • ECONTR     Speicherblöcke zerstört
  • EINVMEM     Ungültige Speicherblockadresse
  • EINVENV     Ungültiges Environment
  • EINVFMT     Ungültiges Format
  • EINVACC     Ungültiger Zugriffscode
  • EINVDAT     Ungültige Daten
  • EINVDRV     Ungültige Laufwerksangabe
  • ECURDIR     Versuch, das aktuelle Verzeichnis zu löschen
  • ENOTSAM     Nicht das gleiche Gerät
  • ENMFILE     Keine weiteren Dateien mehr
  • ENOENT     Datei oder Verzeichnis existiert nicht
  • EMFILE     Zu viele geöffnete Dateien
  • EACCES     Zugriff verweigert
  • EBADF     Ungültiges Datei-Handle
  • ENOMEM     Zu wenig Speicher
  • ENODEV     Gerät existiert nicht
  • EINVAL     Ungültiges Argument
  • E2BIG     Argumentliste ist zu lang
  • ENOEXEC     Fehler beim Exec-Format
  • EXDEV     Kreuzverbindung von Geräten
  • EDOM     Unzulässiges Argument für eine mathematische Funktion
  • ERANGE     Ergebnis außerhalb des darstellbaren Bereichs
  • EFAULT     Unbekannter Fehler
  • EEXIST     Datei existiert bereits


Das dürften jetzt nicht alle gewesen sein. Schauen sie einfach in der Headerdatei <errno.h> oder unter Linux auf der man-Page 'intro' nach.
Die Variable errno wird bei Programmstart normalerweise auf 0 gesetzt, da es keine Fehlernummer mit dem Wert 0 gibt. Deshalb sollten sie errno jedesmal wenn sie eine Systemfunktion aufrufen wieder auf 0 setzen. Vorausgesetzt natürlich sie wollen diese Systemfunktion auf Fehler testen.
Als erstes Beispiel wollen wir nun die Funktion perror() dazu verwenden.....

/*Download:perror.c*/
#include <stdio.h> int main(void) { FILE *fp; fp = fopen("keinedatei.dat", "r"); if (!fp) perror("Kann nicht aus Datei lesen "); return 0; }

Unser Programm versucht die Datei 'keinedatei.dat' zu öffen. Falls diese nicht existiert (if(!fp)) wird eine dementprechende Fehlermeldung ausgegeben.....

Kann nicht aus Datei lesen : No such file or directory (ENOENT)

Sie können aber auch bei der Funktion perror einen NULL - Zeiger als Parameter angeben...

perror(NULL);

In diesem Fall wird nur.....

No such file or directory (ENOENT)

...ausgegeben. Das gleiche nun mit der Funktion strerror().....

/*Download:strerr.c*/
#include <stdio.h> #include <errno.h> int main(void) { FILE *fp; fp = fopen("keinedatei.dat", "r"); if (!fp) fprintf(stderr,"%s\n",strerror(errno)); return 0; }

Das Programm macht das und funktioniert genauso wie das Programm perror.c zuvor.

Mit dem folgenden Programm können sie eine Datei erstellen die sie als Argument in der Kommandozeile mitangeben z.B....

error hallo.txt

Damit wird versucht die Datei hallo.txt zu erstellen. Zuerst versuchen wir die Datei zum lesen zu öffnen. Anschließend überprüfen wir mittels....

if(errno==ENOENT)

...ob die Variable errno den Wert von ENOENT hat. Wenn ja bedeutet dies das keine solche Datei existiert und somit wollen wir sie anlegen. Sollten es Probleme beim anlegen dieser Datei geben so wird die mit dem nächsten perror()-Aufruf ausgegeben. Zur Sicherheit habe ich hier die Variable errno auf 0 gestellt......

/*Download:err.c*/
#include <stdio.h> #include <errno.h> #define NOERROR 0 int main(int argc, char **argv) { FILE *fp; fp = fopen(argv[1], "r"); if(errno==ENOENT) { fclose(fp); errno=NOERROR; fp = fopen (argv[1], "w"); if(!fp) perror(NULL); else printf("Datei %s angelegt\n",argv[1]); } return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf