PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Ähnliche Dokumente
PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

Systemnahe Software WS 2006/2007

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Strukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein

Aufbau eines Kernelmoduls

Linux Prinzipien und Programmierung

Analyse eines gehackten Webservers unter Linux IT-SecX Dipl.-Ing. (FH) Georg Höllrigl

Tafelübung zu BS 1. Prozesse verwalten

Praktikum Betriebssysteme 1. Aufgabe (1)

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

4.4 Prozesse. H. Weber, HS RM SS 2010 Systemprogrammierung Kap. 4.4 Seite 1 von 22

Fuse. Filesystem in Userspace PRÄSENTATION VON TIM WELGE

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Eine Mini-Shell als Literate Program

1.2 Multiprogramming, Multitasking

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Tafelübung zu BS 1. Prozesse verwalten

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

15. C++ vertieft (IV): Ausnahmen (Exceptions)

Zusammenfassung des Handzettels für Programmieren in C

Bash-Skripting Linux-Kurs der Unix-AG

2.2 Adressraumverwaltung

Deklarationen in C. Prof. Dr. Margarita Esponda

Was ist ein Prozess?

Geräte Treiber unter Unix/Linux

Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden

Ein- und Ausgabe mit Dateien

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Ein- und Ausgabe mit Dateien

Übersetzerbau Cluj-Napoca, Rumänien 2007

Bash-Scripting Linux-Kurs der Unix-AG

Fortgeschrittene I/O

Systemnahe Programmierung in C/C++

Hydroinformatik I: Klassen

Bash-Skripting Linux-Kurs der Unix-AG

Beispiel 3. Shared Memory und Explizite Synchronisation. Daniel Prokesch. 27. April Überblick. Shared Memory. Semaphore. Ressourcenverwaltung

Shell-Scripting Linux-Kurs der Unix-AG

Shell-Scripting Linux-Kurs der Unix-AG

100 Trying Ein Anruf wird zu vermitteln versucht. Anruf wird weitergeleitet

PROGRAMMIEREN MIT UNIX/Linux-SYSTEMAUFRUFEN

Ausdrucksbäume in verschiedenen Darstellungen

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Interprozesskommunikation

Programmentwicklung ohne BlueJ

Modulare Programmierung und Bibliotheken

Lösungen der P1-Musterprüfungsaufgaben

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Tafelübung zu BSRvS 1 2. Prozesssynchronisation

Microsoft Visual C++ 6.0

bereit (oder Zombie genannt). Normales Ende (exit) und synchrone und asynchrone Signal-Ereignisse, z.b.

Was machen wir heute? Betriebssysteme Tutorium 10. Frage 10.1.a. Frage 10.1.a

U9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

MUTLIROMLOADER FÜR DAS 512K FLASH MEGACART

Malware. Carlo U. Nicola 09. Dezember Die Struktur eines (harmlosen) aber echten Virus-Programmes analysieren;

Tafelübung zu BS 4. Dateioperationen

A Kompilieren des Kernels B Lineare Listen in Linux C Glossar Interessante WWW-Adressen Literaturverzeichnis...

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren


Programmierkurs C++ Kapitel 6 Module Seite 1

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus

sendeffect API

Lösung Übungszettel 6

Einführung in die Programmiersprache C

U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

8.1 Vom Quellcode zur ausführbaren Programm

Programmieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling

Probeklausur: Programmieren I

1. Aufgabenblatt Unix

Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend

PIC16 Programmierung in HITECH-C

Parallele Sitzungen 225

1A05 64-bit Adressierung unter Alpha OpenVMS

Proseminar C-Programmierung Uni HH - SS Schriftliche Ausarbeitung. Error-handling in C. Lucas Georg

Hydroinformatik I: Klassen

Erstellen, Kompilieren und Ausführen eines PLI-Programms

Java Native Interface (JNI)

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Softwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm

Einführung in die C-Programmierung

9. Dateisysteme. Betriebssysteme Harald Kosch Seite 164

Übungspaket 30 Kopieren von Dateien

Praktikum IKT 3. Semester

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Prozesse and Threads WS 09/10 IAIK 1

Dienstspezifikation nach RFC

180 Ringing Diese Antwort zeigt an, dass das aufgerufene Programm lokalisiert worden ist und der Anruf signalisiert wird.

Hochschule Für Angewandte Wissenschaften FH München Sommersemester Thomas Kolarz. Folie 1.

Programmieren in C Dynamische Listen / Bäume

Übersicht über die C/C++ Bibliotheksfunktionen

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Kapitel 9: Klassen und höhere Datentypen. Selektoren

4.1 Fehler / Logging. H. Weber, HS RM SS 2010 Systemprogrammierung Kap. 4.1 Seite 1 von 29

Transkript:

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN 10. UNIX/Linux: Reaktion auf Fehler Wintersemester 2016/17

Reaktion auf Fehler: Übersicht Systemaufrufe: 1. Rückkehrwert: in den meisten (aber nicht in allen!) Fällen wird bei Fehler -1 zurückgegeben 2. Fehlervariable errno (error nomer ): über die externe Systemvariable werden viele Fehler genauer spezifiziert (siehe Beispielprogramme) Fehler bei der Programmabarbeitung: 1. Signale: (siehe Abschnitt 10) Ein Teil der UNIX-Signale ist der Mitteilung von Fehlern an den ausführenden Prozess vorbehalten, der diese auswerten oder übergehen kann. hierzu gehören: Division durch Null, Gleitkommaüberlauf u.a. Fehler über exit() mitteilen: Ein Kindprozess kann seine Fehler über spezielle exits an den Elternprozess mitteilen. ws2016/17 H.-A. Schindler Folie: 10-2

UNIX-Systeme:Übliche Fehlerausgabe (Beispiel e1sys.c) #include <errno.h> #include void perror(const char *s); extern int errno; Wichtiges zur Fehlerauswertung mittels errno blau hervorgehoben main() { int rw_open; // Rueckkehrwert fuer open-systemaufruf errno = 0; // wird vom System nicht auf Null gesetzt (!!) // Fehler, wenn "Datei1" nicht existiert: rw_open = open("datei1", O_RDONLY); if(rw_open == -1){ perror("abc"); // abc : irgendein (hier: sinnloser) Text perror("oeffnen Datei1"); // sinnvollere Text-Verwendung } ws2016/17 H.-A. Schindler Folie: 10-3

#include-datei errno.h(beispiel) Die Header-Datei mit diesen Definitionen kann sich je nach System an unterschiedlichen Stellen befinden, z.b. in /usr/include/errno.h Teilweise unterscheiden sich die durch errno definierten Fehler in verschiedenen Systemen. Es können auch noch wesentlich mehr errno-werte spezifiziert sein. #define EPERM 1 /* Operation not permitted*/ #define ENOENT 2 /* No such file or directory*/ #define ESRCH 3 /* No such process*/ #define EINTR 4 /* Interrupted system call*/ #define EIO 5 /* I/O error*/ #define ENXIO 6 /* No such device or address*/ #define E2BIG 7 /* Argument list too long*/ #define ENOEXEC 8 /* Exec format error*/ #define EBADF 9 /* Bad file number*/ #define ECHILD 10 /* No child processes*/ #define EAGAIN 11 /* Try again*/ #define ENOMEM 12 /* Out of memory*/ #define EACCES 13 /* Permission denied*/ #define EFAULT 14 /* Bad address*/ #define ENOTBLK 15 /* Block device required*/ ws2016/17 H.-A. Schindler Folie: 10-4

#include-datei errno.h (Beispiel) #define EBUSY 16 /* Device or resource busy*/ #define EEXIST 17 /* File exists*/ #define EXDEV 18 /* Cross-device link */ #define ENODEV 19 /* No such device*/ #define ENOTDIR 20 /* Not a directory*/ #define EISDIR 21 /* Is a directory*/ #define EINVAL 22 /* Invalid argument*/ #define ENFILE 23 /* File table overflow*/ #define EMFILE 24 /* Too many open files*/ #define ENOTTY 25 /* Not a typewriter*/ #define ETXTBSY 26 /* Text file busy*/ #define EFBIG 27 /* File too large */ #define ENOSPC 28 /* No space left on device*/ #define ESPIPE 29 /* Illegal seek*/ #define EROFS 30 /* Read-only file system*/ #define EMLINK 31 /* Too many links */ #define EPIPE 32 /* Broken pipe*/ #define EDOM 33 /* Math argument out of domain of func*/ #define ERANGE 34 /* Math result not representable*/... ws2016/17 H.-A. Schindler Folie: 10-5

Fehlerausgabe mit Routine my_errorreport() #include <stdio.h> #include <sys/file.h> #include <errno.h> Wichtiges zur Fehlerauswertung mittels errno blau hervorgehoben extern int errno; main() { int rw_open; // Rueckkehrwert fuer open()-systemaufruf printf("\ntestprogramm\ngenauere Fehlerspezifikation mittels errno\n H ); errno= 0; // Wichtig! errno wird vom System nicht auf Null gesetzt } //Datei1 existiert nicht oder hat ungeeignete Zugriffsrechte rw_open= open("datei1", O_RDONLY); printf("(kontrolle: Rueckkehrwert open: %d errno: %d)\n\n", rw_open, errno); if(rw_open == -1){ // Fehler so noch nicht genau bestimmt printf("fehler bei open: "); my_errorreport(errno); // eigene Routine zur genaueren Auswertung }; ws2016/17 H.-A. Schindler Folie: 10-6

Eigene Fehlerauswerte-Routine my_errorreport (Ausschnitt) my_errorreport(n) int n; { switch(n) { case 0: printf("durch errno wird kein Fehler mitgeteilt"); case 1: printf("operation nicht erlaubt"); //EPERM case 2: printf("datei oder Verzeichnis existiert nicht"); //ENOENT case 3: printf("kein solcher Prozess"); //ESRCH case 4: printf("unterbrochener Systemaufruf"); //EINTR case 5: printf("fehler bei der Ein-/Ausgabe"); //EIO case 6:... ws2016/17 H.-A. Schindler Folie: 10-7

Aufgabenstellung (Anregungen) 1. Im Progamme1sys.cist die aktuelle vom System vorgesehene Ausgabe von Fehlermitteilungen mit perror() gezeigt. (HINWEIS: Diese Fehlerausgabe sieht in älteren Systemen etwas anders aus!) 2. Studieren Sie die Programme e2.cund e3.c. Beschäftigen Sie sich insbesondere mit den durch errno genauer spezifizierten Fehlern. 3. Kompilieren Sie Programm e2.c. Führen Sie das übersetzte Programm zunächst aus, ohne eine zu öffnende Datei zur Verfügung zu stellen. Welcher Fehler wird durch das System festgestellt? 4. Erzeugen Sie jetzt eine Datei Datei1, aber mit zum spezifizierten open()- Aufruf ungeeigneten Zugriffsrechten. (Dateierzeugung: z.b. >Datei1, read-recht für alle entziehen: chmod a-r Datei1 ) Welcher Fehler wird jetzt durch das System festgestellt? 5. Verwenden Sie jetzt das Programm e3.c. Aus einer Datei ohne Inhalt(bzw. einer zum read-aufruf zu kurzen Datei) soll gelesen werden. Welcher Fehler wird jetzt durch das System festgestellt? ws2016/17 H.-A. Schindler Folie: 10-8

Aufgabenstellung (Anregungen) 6. Einen weiteren möglichen Fehler bei der Datei-Arbeit enthält e4.c R (Dabei sollte bei Datei1 aber das Leserecht wieder gesetzt sein!) 7. Sie können weitere interessante Fehlerfälle erzeugen. Verwenden Sie die vorgestellten Mechanismen und z.b. Beispielprogramme aus vorangegangenen Lehrveranstaltungen. ws2016/17 H.-A. Schindler Folie: 10-9