![ein Kapitel weiter](../weiter.gif)
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 weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|