Übungen zu Systemprogrammierung 2 (SP2)



Ähnliche Dokumente
Übungen zu Systemprogrammierung 2 (SP2)

Anbindung des eibport an das Internet

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

C.M.I. Control and Monitoring Interface. Zusatzanleitung: Datentransfer mit CAN over Ethernet (COE) Version 1.08

Synchronisations- Assistent

ASA Schnittstelle zu Endian Firewall Hotspot aktivieren. Konfiguration ASA jhotel

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Client-Server mit Socket und API von Berkeley

Transmission Control Protocol (TCP)

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Transition vom heutigen Internet zu IPv6

HBF IT-Systeme. BBU-NPA Übung 4 Stand:

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Enigmail Konfiguration

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Guide DynDNS und Portforwarding

inviu routes Installation und Erstellung einer ENAiKOON id

Voraussetzungen für die Nutzung der Format Rechenzentrumslösung (Hosting)

15 Transportschicht (Schicht 4)

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Einführung in die Netzwerktechnik

Vorlesung SS 2001: Sicherheit in offenen Netzen

Internationales Altkatholisches Laienforum

Anleitung zum LPI ATP Portal

Anwendungsprotokolle: HTTP, POP, SMTP

Externe Abfrage von für Benutzer der HSA über Mozilla-Thunderbird

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Analyse und Darstellung der Protokollabläufe in IPv6-basierten Rechnernetzen

Netzwerk-Programmierung in C

Man liest sich: POP3/IMAP

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Inhaltverzeichnis 1 Einführung Zugang zu den Unifr Servern Zugang zu den Druckern Nützliche Links... 6

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

U7-1 Hinweise zur Evaluation. U7-2 Netzwerkkommunikation und Byteorder. U7-3 Sockets. Evaluation. Frage "eigener Aufwand zur Vor- und Nachbereitung"

Internet online Update (Mozilla Firefox)

GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT

E Mail Versand mit der Schild NRW Formularverwaltung

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Konfiguration IKMZ / Universitätsrechenzentrum des Cisco VPN-Clients v3.6 Netze und Datenkommunikation

Lösung Übungszettel 6

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Aufruf der Weboberflache des HPM- Warmepumpenmanagers aus dem Internet TIPPS

DNÜ-Tutorium HS Niederrhein, WS 2014/2015. Probeklausur

SIMP 1.01 Protokollspezifikation (Mindestanforderung)

Dieses HowTo darf nicht vervielfältigt oder veröffentlich werden ohne Einverständnis des Erstellers. Alle Angaben ohne Gewähr.

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

Inventur. Bemerkung. / Inventur

Copyright MB Connect Line GmbH 2014

FastViewer v3 bei der TechniData IT-Service GmbH

Abschluss Version 1.0

Web Grundlagen zum Spidering

Collax PPTP-VPN. Howto

STRATO Mail Einrichtung Mozilla Thunderbird

CNAME-Record Verknüpfung einer Subdomain mit einer anderen Subdomain. Ein Alias für einen Domainnamen.

Nutzung von GiS BasePac 8 im Netzwerk

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Online-Publishing mit HTML und CSS für Einsteigerinnen

OP-LOG

Konfiguration eines DNS-Servers

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

ISA Server 2004 Erstellen einer Webverkettung (Proxy-Chain) - Von Marc Grote

Einrichtung eines -konto mit Thunderbird

Bedarfsmeldungen für Studentische Hilfskräfte und Tutoren erstellen und ändern

Einrichtung von Mozilla Thunderbird

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Konfiguration der tiptel Yeastar MyPBX IP-Telefonanlagen mit Peoplefone Business SIP Trunk

Anleitung. Verschieben des alten -Postfachs (z.b. unter Thunderbird) in den neuen Open Xchange-Account

Anmerkungen zur Erstellung, dem automatisierten Versand und der automatisierten Auswertung von pdf-formularen

A. Ersetzung einer veralteten Govello-ID ( Absenderadresse )

Konfiguration des Fernzugriffes auf Eyseo-IP-Netzwerkkameras mittels dynamischer IP-Adresse

Neuinstallation Einzelplatzversion

Als erstes besuchen wir nun also dyndns.org, das auf dyndns.com umleitet. Dort klicken wir nun oben rechts auf den Reiter: DNS & Domains.

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

Auf der linken Seite wählen Sie nun den Punkt Personen bearbeiten.

ecaros2 - Accountmanager

Konzepte der Informatik

Erstellen der Barcode-Etiketten:

Der SD-Kartenslot befindet sich an der rechten Gehäuseseite unterhalb der rechteckigen hellgrauen Gummiabdeckung.

Tafelübung zu BS 4. Interprozesskommunikation

Print2CAD 2017, 8th Generation. Netzwerkversionen

Übung 6. Tutorübung zu Grundlagen: Rechnernetze und Verteilte Systeme (Gruppen MI-T7 / DO-T5 SS 2015) Michael Schwarz

Transkript:

Übungen zu Systemprogrammierung 2 (SP2) Ü1 Interprozesskommunikation mit Sockets C. Erhardt, J. Schedel, A. Ziegler, J. Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2015 19. bis 23. Oktober 2015 https://www4.cs.fau.de/lehre/ws15/v_sp2 Agenda 1.1 Organisatorisches 1.2 IPC-Grundlagen 1.3 Betriebssystemschnittstelle zur IPC 1.4 Ein-/Ausgabemechanismen 1.5 Gelerntes anwenden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1 1

Miniklausur-Termin Termin für die Miniklausur Donnerstag, 22.10., 18:00 s.t. im H7 und H11 c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.1 Organisatorisches 1 2 Organisatorisches Übungsbetrieb Rechnerübungen von SP1 und SP2 finden gemeinsam statt Termine siehe https: //www4.cs.fau.de/lehre/ws15/v_sp2/uebung/univis.ushtml Als unbetreut eingetragene Rechnerübungen sind mit Raumreservierung, aber ohne Tutor SVN-Repository URL: https://www4.cs.fau.de/i4sp/ws15/sp2/<login> Passwort setzen: /proj/i4sp2/bin/change-password Projektverzeichnisse in diesem Semester unter /proj/i4sp2 SP1-Repository aus dem Vorsemester weiterhin zugreifbar c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.1 Organisatorisches 1 3

Programmieraufgaben Durchgängige Verwendung von 64-Bit Programmiersprache ISO C99 Betriebssystemstandard SUSv4 (= POSIX.1-2008) Kompilieren & Linken Standard-Flags in SP: -std=c99 -pedantic -Wall -Werror \ -D_XOPEN_SOURCE=700 Zum Debuggen zusätzlich -g In SP2 konsequente Benutzung von Makefiles Ach, übrigens... Fehlerabfragen nicht vergessen! Wir wollen in SP robuste Programme schreiben. c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.1 Organisatorisches 1 4 Agenda 1.1 Organisatorisches 1.2 IPC-Grundlagen 1.3 Betriebssystemschnittstelle zur IPC 1.4 Ein-/Ausgabemechanismen 1.5 Gelerntes anwenden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 5

Client-Server-Modell IPC-Grundlagen Ein Server ist ein Programm, das einen Dienst (Service) anbietet, der über einen Kommunikationsmechanismus erreichbar ist Server Akzeptiert Anforderungen, die von außen kommen Führt einen angebotenen Dienst aus Schickt das Ergebnis zurück zum Sender der Anforderung In der Regel als normaler Benutzerprozess realisiert Client Schickt eine Anforderung an einen Server Wartet auf eine Antwort c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 6 Kommunikation innerhalb eines Systems IPC-Grundlagen? Wie findet ein Client den gewünschten Dienstanbieter? Intuitiv: über dessen Prozess-ID System A Prozess 1 PID = 23? Prozess 2 PID = 42 Problem: Prozesse werden dynamisch erzeugt/beendet; PID ändert sich Lösung: Verwendung eines abstrakten Namens für den Dienst System A Prozess 1 UNIX-Socket UNIX-Socket /tmp/sock Prozess 2 PID = 23 PID = 42 Prozess 2 ist über den Dienstnamen (hier: einen Dateinamen) erreichbar c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 7

Kommunikation über Systemgrenzen hinweg IPC-Grundlagen? Wie findet ein Client nun den gewünschten Dienstanbieter? Über einen zweistufig aufgebauten Namen : 1. Identifikation des Systems innerhalb des Netzwerks 2. Identifikation des Prozesses innerhalb des Systems Beispiel TCP/IP: eindeutige Kombination aus 1. IP-Adresse (identifiziert Rechner im Internet) 2. Port-Nummer (identifiziert Dienst auf dem Rechner) System A (131.188.30.200) System B (72.26.203.99) Prozess 1 PID = 23 Port 4711 80 Prozess 2 PID = 42 c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 8 Adressierung von Rechnern im Internet IPC-Grundlagen Internet Protocol, Version 4 (IPv4) Protokoll zur Bildung eines weltweiten virtuellen Netzwerks auf der Basis mehrerer physischer Netze (durch Routing) 1981 als Standard verabschiedet 32-Bit-Adressraum ( 4 Milliarden Adressen) Notation: 4 mit. getrennte Byte-Werte in Dezimaldarstellung z. B. 131.188.30.200 Nicht zukunftsfähig wegen des viel zu kleinen Adressraums Alle Adressblöcke in Asien/Pazifikraum (2011), Europa/Nahost (2012) und Lateinamerika/Karibik (2014) bereits vergeben! c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 9

Adressierung von Rechnern im Internet IPC-Grundlagen Internet Protocol, Version 6 (IPv6) Nachfolgeprotokoll von IPv4 1998 als Standard verabschiedet, Einführung aktuell im Gange Dual Stack: IPv4 und IPv6 parallel betreibbar 128-Bit-Adressraum ( 3,4 10 38 Adressen) Sollte fürs Erste ausreichen :-) Notation: 8 mit : getrennte 2-Byte-Werte in Hexadezimaldarstellung z. B. 2001:638:a00:1e:219:99ff:fe33:8e75 In der Adresse kann einmalig :: als Kurzschreibweise einer Nullfolge verwendet werden z. B. localhost-adresse: 0:0:0:0:0:0:0:1 = ::1 c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 10 Domain Name System (DNS) IPC-Grundlagen IP-Adressen sind nicht leicht zu merken... und ändern sich, wenn man einen Rechner in ein anderes Rechenzentrum umzieht Lösung: zusätzliche Abstraktion durchs DNS-Protokoll DNS-Server faui06a.cs.fau.de: 131.188.30.200 xkcd.com: 72.26.203.99 faui06a.cs.fau.de 1 query: xkcd.com query: 131.188.30.200 3 xkcd.com 72.26.203.99 131.188.30.200 2 faui06a.cs.fau.de 72.26.203.99 connect: 72.26.203.99 1. Forward lookup: Rechnername IP-Adresse 2. Kommunikationsaufbau 3. Reverse lookup (im Beispiel optional): IP-Adresse Rechnername c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 11

Port IPC-Grundlagen Numerische Identifikation eines Dienstes innerhalb eines Systems Port-Nummer: 16-Bit-Zahl, d. h. kleiner als 65536 Port-Nummern < 1024: well-known ports Können nur von Prozessen gebunden werden, die mit speziellen Privilegien gestartet wurden (Ausführung als root) z. B. ssh = 22, smtp = 25, http = 80, https = 443 c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 12 Kommunikationsarten IPC-Grundlagen Verbindungsorientiert (Datenstrom/Stream) Gesichert gegen Verlust und Duplizierung von Daten Reihenfolge der gesendeten Daten bleibt erhalten Vergleichbar mit einer UNIX-Pipe allerdings bidirektional Implementierung: Transmission Control Protocol (TCP) Paketorientiert (Datagramm) Schutz vor Bitfehlern nicht vor Paketverlust oder -duplizierung Datenpakete können eventuell in falscher Reihenfolge ankommen Grenzen von Datenpaketen bleiben erhalten Implementierung: User Datagram Protocol (UDP) c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 13

Beim Austausch von binären Datenwörtern ist die Reihenfolge der einzelnen Bytes zur richtigen Interpretation wichtig IPC-Grundlagen Übertragung von Daten Beim- z. Austausch B. Intel x86 von (litte endian) binärenund Datenwörtern Sun SPARC (big zwischen endian) - verschiedenen setzt einen Rechnern Konsens muss über Einigkeit die verwendete überbyteorder die verwendete voraus Byteorder herrschen! Beispiel: Kommunikation zwischen x86-rechner (little endian) und SPARC-Rechner (big endian) Kommunikation zwischen Rechnern verschiedener Architekturen Definierter Standard: Netzwerk-Byteorder ist auf big endian festgelegt Beispiel: Wert Repräsentation 0xcafebabe big endian 0 1 2 3 ca fe ba be SP - Ü Systemprogrammierung 2 Übungen little endian Definierter Standard: Netzwerk-Byteorder = big endian Konvertierung vor dem Senden und nach dem Empfangen nötig Ausnahme: bei Übertragung von Einzelbytes bzw. Byte-Strings Jürgen Kleinöder, Michael Stilkerich, Jens Schedel, Christoph Erhardt Universität Erlangen-Nürnberg Informatik 4, 2012 U01.fm 2012-04-27 14.19 be ba ca U1.11 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. fe c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.2 IPC-Grundlagen 1 14 Agenda 1.1 Organisatorisches 1.2 IPC-Grundlagen 1.3 Betriebssystemschnittstelle zur IPC 1.4 Ein-/Ausgabemechanismen 1.5 Gelerntes anwenden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 15

Sockets Betriebssystemschnittstelle zur IPC Generischer Mechanismus zur Interprozesskommunikation Implementierung ist abhängig von der jeweiligen Kommunikations-Domäne Innerhalb des selben Systems: z. B. UNIX-Socket Adressierung über Dateinamen, Kommunikation über gemeinsamen Speicher, keine Sicherungsmechanismen notwendig Über Rechnergrenzen hinweg: z. B. TCP/UDP-Socket Adressierung über IP-Adresse + Port, nachrichtenbasierte Kommunikation, Sicherungsmechanismen bei TCP Beim Verbindungsaufbau sind die entsprechenden Parameter zu wählen Anschließende Verwendung im Programm ist transparent... egal, ob der Kommunikationspartner ein Prozess auf dem selben Rechner oder am anderen Ende der Welt ist c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 16 Erzeugen eines Sockets Betriebssystemschnittstelle zur IPC Sockets werden mit dem Systemaufruf socket(2) angelegt: #include <sys/socket.h> int socket(int domain, int type, int protocol); domain, z. B.: PF_UNIX: UNIX-Domäne PF_INET: IPv4-Domäne PF_INET6: IPv6-Domäne (kompatibel zu IPv4, wenn vom OS unterstützt) type innerhalb der gewählten Domäne: SOCK_STREAM: Stream-Socket SOCK_DGRAM: Datagramm-Socket protocol: 0: Standard-Protokoll für gewählte Kombination (z. B. TCP/IP bei PF_INET(6) + SOCK_STREAM) Ergebnis ist ein numerischer Socket-Deskriptor Entspricht einem Datei-Deskriptor und unterstützt (bei Stream-Sockets) die selben Operationen: read(2), write(2), close(2),... c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 17

Verbindungsaufbau durch den Client IPC-Schnittstelle connect(2) meldet Verbindungswunsch an Server: int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); sockfd: Socket, über den die Kommunikation erfolgen soll addr: Beinhaltet Namen (bei uns: IP-Adresse und Port) des Servers addrlen: Länge der konkret übergebenen addr-struktur connect() blockiert solange, bis der Server die Verbindung annimmt oder zurückweist Mehr zum Server in der nächsten Übung Socket ist anschließend bereit zur Kommunikation mit dem Server c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 18 DNS-Anfragen Betriebssystemschnittstelle zur IPC Zum Ermitteln der Werte für die sockaddr-struktur kann das DNS-Protokoll verwendet werden getaddrinfo(3) liefert die nötigen Werte: int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node gibt den DNS-Namen des Hosts an (oder die IP-Adresse als String) service gibt entweder den numerischen Port als String (z. B. "25" oder den Dienstnamen (z. B. "smtp", getservbyname(3)) an Mit hints kann die Adressauswahl eingeschränkt werden (z. B. auf IPv4-Sockets). Nicht verwendete Felder auf 0 bzw. NULL setzen. Ergebnis ist eine verkettete Liste von Socket-Namen; ein Zeiger auf das Kopfelement wird in * res gespeichert Freigabe der Ergebnisliste nach Verwendung mit freeaddrinfo(3) c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 19

DNS-Anfragen Betriebssystemschnittstelle zur IPC struct addrinfo { int ai_flags; // Flags zur Auswahl (hints) int ai_family; // z. B. AF_INET6 int ai_socktype; // z. B. SOCK_STREAM int ai_protocol; // Protokollnummer socklen_t ai_addrlen; // Größe von ai_addr struct sockaddr *ai_addr; // Adresse fuer connect() char *ai_canonname; // Offizieller Hostname (FQDN) struct addrinfo *ai_next; // Nächstes Listenelement oder NULL }; ai_flags relevant zur Anfrage von Auswahlkriterien (hints) AI_ADDRCONFIG: Auswahl von Adresstypen, für die auch ein lokales Interface existiert (z. B. werden keine IPv6-Adressen geliefert, wenn der aktuelle Rechner gar keine IPv6-Adresse hat) ai_family, ai_socktype, ai_protocol für socket(2) verwendbar ai_addr, ai_addrlen für connect(2) verwendbar c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 20 DNS-Anfragen: Beispiel Betriebssystemschnittstelle zur IPC struct addrinfo hints = {.ai_socktype = SOCK_STREAM, // Nur TCP-Sockets.ai_family = AF_UNSPEC, // Beliebige Adressfamilie.ai_flags = AI_ADDRCONFIG, // Nur lokal verfuegbare Adresstypen }; // C99: alle anderen Elemente der Struktur werden implizit genullt struct addrinfo *head; getaddrinfo("xkcd.com", "80", &hints, &head); // Fehlerbehandlung! Rueckgabewert mit gai_strerror(3) auswerten, um // Fehlerbeschreibung zu erhalten // Liste der Adressen durchtesten int sock; struct addrinfo *curr; for (curr = head; curr!= NULL; curr = curr->ai_next) { sock = socket(curr->ai_family, curr->ai_socktype, curr->ai_protocol); // Fehlerbehandlung! if (connect(sock, curr->ai_addr, curr->ai_addrlen) == 0) break; close(sock); } if (curr == NULL) { // Keine brauchbare Adresse gefunden :-( } // sock kann jetzt fuer die Kommunikation mit dem Server benutzt werden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.3 Betriebssystemschnittstelle zur IPC 1 21

Agenda 1.1 Organisatorisches 1.2 IPC-Grundlagen 1.3 Betriebssystemschnittstelle zur IPC 1.4 Ein-/Ausgabemechanismen 1.5 Gelerntes anwenden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.4 Ein-/Ausgabemechanismen 1 22 Ein-/Ausgabemechanismen Nach dem Verbindungsaufbau lässt sich ein Stream-Socket nach dem selben Schema benutzen wie eine geöffnete Datei Für Ein- und Ausgabe stehen verschiedene Funktionen zur Verfügung: Ebene 2: POSIX-Systemaufrufe arbeiten mit Dateideskriptoren (int) Ebene 3: Bibliotheksfunktionen greifen intern auf die Systemaufrufe zurück wesentlich flexibler einsetzbar arbeiten mit File-Pointern (FILE *) Ebene Variante Ein-/Ausgabedaten Funktionen 2 blockorientiert Puffer, Länge read(), write() blockorientiert Array, Elementgröße, -anzahl fread(), fwrite() 3 zeichenorientiert Einzelbyte getc(), putc() zeilenorientiert \0 -terminierter String fgets(), fputs() formatiert Formatstring, beliebige Variablen fscanf(), fprintf() c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.4 Ein-/Ausgabemechanismen 1 23

Ein-/Ausgabemechanismen: FILE * Auf Grund ihrer Flexibilität eignen sich FILE * für String-basierte Ein- und Ausgabe wesentlich besser Erstellen eines FILE * für einen gegebenen Dateideskriptor: FILE *fdopen(int fd, const char *mode); mode kann sein: "r", "w", "a", "r+", "w+", "a+" fd muss im entsprechenden Modus geöffnet worden sein Schließen des erzeugten FILE *: int fclose(file *fp); Darunterliegender Dateideskriptor wird dabei geschlossen Nachfolgendes close(2) nicht notwendig c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.4 Ein-/Ausgabemechanismen 1 24 Ein-/Ausgabemechanismen: Sockets und FILE * FILE * benutzen einen eigenen Pufferungsmechanismus Hat möglicherweise unerwünschtes Verhalten, wenn derselbe FILE * für Ein- und Ausgabe verwendet wird Zwei separate FILE * für Empfangs- und Senderichtung erstellen Socket-Deskriptor vorher duplizieren, da nicht mehrere FILE * auf denselben Deskriptor verweisen sollten int sock =...; // FILE * fuers Empfangen erstellen FILE *rx = fdopen(sock, "r"); // Duplikat des Socket-Deskriptors anlegen int sock2 = dup(sock); // FILE * fuers Senden erstellen FILE *tx = fdopen(sock2, "w"); Nach jeder geschriebenen Zeile mit fflush(3) das Leeren des Zwischenpuffers erzwingen c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.4 Ein-/Ausgabemechanismen 1 25

Agenda 1.1 Organisatorisches 1.2 IPC-Grundlagen 1.3 Betriebssystemschnittstelle zur IPC 1.4 Ein-/Ausgabemechanismen 1.5 Gelerntes anwenden c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.5 Gelerntes anwenden 1 26 Aktive Mitarbeit erforderlich! Aufgabenstellung Mit Hilfe des Programms Netcat (nc, ncat) eine E-Mail an die eigene Adresse senden Dialog mit dem Mail-Server live nachspielen Sonderbehandlung von Punkten am Zeilenanfang nachvollziehen Programm schreiben, welches den Flächeninhalt verschiedener geometrischer Formen berechnen kann Eingaben werden von STDIN eingelesen Eingabeformat: <zahl> <zahl> <form> Unterstützte Formen: dreieck, rechteck Ausgabeformat soll die eingegebene Werte und den Flächeninhalt beeinhalten c ce, js, az, jk SP2 (Ü1 WS 2015) 1 Client-Sockets 1.5 Gelerntes anwenden 1 27