Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. FB Automatisierung und Informatik.

Ähnliche Dokumente
Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. Hochschule Harz. FB Automatisierung und Informatik.

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien

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

Dateizugriff unter C

Programmiersprachen Einführung in C

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

Tafelübung zu BS 4. Dateioperationen

file:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoii...

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm

Übungen zu Systemnahe Programmierung in C (SPiC)

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

Inhalt Übungen zu Systemnahe Programmierung in C (SPiC) Inhalt. Terminal - historisches (etwas vereinfacht) Seriell. Computer. Netzwerk DFÜ.

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

C-Kurs 2010 Pointer. 16. September v2.7.3

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

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

Teil I Debuggen mit gdb

5. Dateioperationen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

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

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

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

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

Dateien. INE2, Mittwoch / TE402 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Einführung in die C-Programmierung

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm

Wie man eigene Programme erstellt

Programmieren in C. Die C-Standardbibliothek: Datei Ein- und Ausgabe. Prof. Dr. Nikolaus Wulff

Modellierung und Programmierung

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Linux. Fehlerbehandlung Sebastian Maier. Aufgabe: concat Übung 7 Anhang

Wiederholung und Vertiefung. Programmieren in C. Pointer und so... thoto. /dev/tal e.v. 6. April 2013 (Version vom 11. April 2013) Programmieren in C

E-/A-Funktionalität nicht Teil der Programmiersprache

Ein- und Ausgabe mit Dateien

Dateien lesen und schreiben mit php

Bash-Skripting Linux-Kurs der Unix-AG

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Material zum Grundlagenpraktikum ITS. eine kleine Linux-Befehlsreferenz. Stand: Oktober 2007 zusammengestellt von: Cornelia Menzel Version 1.

Hintergrundspeicher (Secondary storage) Katalog. SPiC

Assembler - Einleitung

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

Linux-Einführung Übung

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Linux-Befehlsreferenz

Vorsemesterkurs Informatik

Programmieren in C++

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Praxis der Programmierung

SCI Linux Einführung

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Arbeiten mit der Shell Teil 1

Linux II. Reguläre Ausdrücke Editoren Scripting. 2 Linux II. Linux I II III Res WN/TT NLTK XML Weka E Reguläre Ausdrücke Editoren Scripting

Bash-Skripting Linux-Kurs der Unix-AG

Ein- und Ausgabe mit Dateien

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Arbeiten mit der Shell Teil 1

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

182. stdio stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>

Praktikum Betriebssysteme 1. Aufgabe (1)

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Shell-Scripting Linux-Kurs der Unix-AG

LINUX Gesamtmitschrift

Einführung in die Kommandozeile

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")

Arbeiten mit der Shell Teil 1

Informatik I Programmieren in C

2 2. Tag. 2.1 Das Dateisystem. das Dateisystem organisiert die Speicherung von Daten. viele Betriebssysteme haben verschiedene Dateisysteme

Übung 4: Schreiben eines Shell-Skripts

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

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

Arrays (Felder/Vektoren)

Bash-Scripting Linux-Kurs der Unix-AG

Outline. 1 Einleitung. 2 Einführung in C. 3 Fortgeschrittenes in C. 4 Einführung in Emacs Lisp. 5 Einführung in Prolog. 6 Formale Semantik

C-Programme erstellen und ausführen

Merkblatt System-C Installation Linux

Computer & GNU/Linux Einführung Teil 4

Benutzer- und Rechtevergabe

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

Shell-Scripting Linux-Kurs der Unix-AG

C und Linux HANSER. Martin Gräfe. Die Möglichkeiten des Betriebssystems mit eigenen Programmen nutzen. Z., erweiterte Auflage

Tools zur Programmierung mit C Software Entwicklung 1

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Folien zur AG: Objektorientiertes Programmieren in C++ Einheit 5: Funktionen. Michael Hahsler, Gottfried Rudorfer und Werner J.

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Grundlagen der Programmierung

Kommandozeile und Batch-Dateien. Molekulare Phylogenetik Praktikum

Funktionales C++ zum Ersten

Advanced Programming in C

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Computernutzung für Experimentalphysiker Frei progammierbare Rechner als Werkzeuge in der Experimentalphysik Teil 2

Kurzeinführung in C99

Fallbeispiel Unix. Betriebssysteme. Hermann Härtig TU Dresden

U6-1 Linux-Benutzerumgebung

Transkript:

Linux Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de http://www.miwilhelm.de Raum 2.202 Tel. 03943 / 659 338 FB Automatisierung und Informatik: Linux Inhalt 1. Einführung, Literatur, Begriffe 2. Installation 3. Konsolen-Befehle, Shell, Manual 4. Komplexe Befehle (grep, find, tar, sed, cron, netcat) 5. C-Programmierung (C, IO, Thread, make) 6. Python (Sprache) 7. Python (GUI) FB Automatisierung und Informatik: Linux 2 1

Linux und C C Variablen à la Java Datentypen à la Java, auch unsigned if à la Java Schleifen à la Java, ohne foreach Prozeduren à la Java-Methoden Keine Klassen (C++, g++) I/O (Komfortables Framework) Handle-Konzept Pointer Threads und Semaphore, Mutex Zugriff auf das System (Dateien, Ordner, Prozesse) FB Automatisierung und Informatik: Linux 3 Linux und C Programme gcc g++ gdb make-datei Editoren vi, vim nano Emacs Texteditor in der GUI Übersetzen in der Konsole Debugger FB Automatisierung und Informatik: Linux 4 2

C-Programmierung Beispielcode: Ausgabe eines Textes #include <stdio.h> int main(void){ puts("hallo Wernigerode"); return 0; Übersetzen mit: gcc bsp1.c -o bsp1 -S nur kompilieren -c nur kompilieren und assemblieren -o <Datei> kompilieren, assemblieren, linken -O Optimieren -lname Library name.lib einbinden (Threads) FB Automatisierung und Informatik: Linux 5 Beispielcode: Summe von 1 bis n long long summe; // globale Variable void calc(long n) { long i; summe=0.0; for (i=0; i<=n; i++) { summe+= i; int main(int argc, char *argv[]) { calc(1000); printf("summe: %ld\n",summe); return 0; FB Automatisierung und Informatik: Linux 6 3

Beispielcode: Summe von 1 bis n long long calc(long n) { long i; summe=0.0; for (i=0; i<=n; i++) { summe+= i; if [ $# -eq 0 ] then echo "bitte einen Parameter uebergeben" echo " c bsp1" else gcc $1.c -o $1 fi int main(int argc, char *argv[]) { long long summe = calc(1000); printf("summe: %ld\n",summe); return 0; FB Automatisierung und Informatik: Linux 7 I/O-Funktionen fopen FILE *fopen (const char *Pfad, const char *Modus); Modus: r - Datei nur zum Lesen öffnen (READ) w - Datei nur zum Schreiben öffnen (WRITE), löscht den Inhalt der Datei, wenn sie bereits existiert a - Daten an das Ende der Datei anhängen (APPEND), die Datei wird nötigenfalls angelegt r+ - Datei zum Lesen und Schreiben öffnen, die Datei muss bereits existieren w+ - Datei zum Lesen und Schreiben öffnen, die Datei wird nötigenfalls angelegt a+ - Datei zum Lesen und Schreiben öffnen, um Daten an das Ende der Datei anzuhängen, die Datei wird nötigenfalls angelegt b - Binärmodus (anzuhängen an die obigen Modi, z.b. "rb" oder "w+b"). t Textdatei Modus FB Automatisierung und Informatik: Linux 8 4

I/O-Funktionen: fopen + fprintf schreiben Rückgabewert: Bei einem Fehler NULL Sonst handle für diese Datei Beispiele: #include <stdio.h> FILE *handle; handle = fopen ("testdatei.txt", "wt"); // wenn vorhanden, gelöscht if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { int i=42; fprintf (handle, "Hallo, Welt i:%d\n"); fclose (handle); IO1 FB Automatisierung und Informatik: Linux 9 I/O-Funktionen: fopen + fprintf schreiben #include <stdio.h> FILE *handle; handle = fopen ("testdatei.txt", "wt"); // wenn vorhanden, gelöscht if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { for (int i=0; i<100; i++) fprintf (handle, "%d\n",i); // %c %i %s %f %lf %ld fclose (handle); IO2 FB Automatisierung und Informatik: Linux 10 5

I/O-Funktionen: fopen + fgets lesen #include <stdio.h> FILE * handle; handle = fopen ("testdatei.txt", "rt"); if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { char s[100]; fgets (s, 100, handle); // ende wenn i>=n oder \r\n fclose (handle); puts(s); IO3 FB Automatisierung und Informatik: Linux 11 I/O-Funktionen: Parameter, fopen + fgets lesen #include <stdio.h> int main(int argc, char *argv[]) if (argc>1) { FILE * handle; handle = fopen (argv[1], "rt"); if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { char s[100]; fgets (s, 100, handle); // ende wenn i>=n oder \r\n fclose (handle); // if // if // main IO4 FB Automatisierung und Informatik: Linux 12 6

I/O-Funktionen: fopen + fprintf schreiben #include <stdio.h> int main(int argc, char *argv[]) if (argc>1) { FILE * handle; handle = fopen (argv[1], "wt"); if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { fprintf (handle, "Hallo, Welt\nHallo Hochschule\n"); fclose (handle); // if // if // main IO5 FB Automatisierung und Informatik: Linux 13 I/O-Funktionen: fopen + binär schreiben #include <stdio.h> // size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream) int main(int argc, char *argv[]) if (argc>1) { FILE * handle; handle = fopen (argv[1], "wb"); if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { for (int i=-2; i<100; i++) int n = fwrite (&i, sizeof(i), 1, handle); fclose (handle); // if // if // main IO6 FB Automatisierung und Informatik: Linux 14 7

FB Automatisierung und Informatik: Linux 15 abc im Hexeditor: 2er Komplement FB Automatisierung und Informatik: Linux 16 8

I/O-Funktionen: fopen + binär lesen int main(int argc, char *argv[]) if (argc>1) { FILE * handle; handle = fopen (argv[1], "rb"); if (handle == NULL) { printf("fehler beim Oeffnen der Datei."); else { int value; for (int i=0; i<100; i++) { int n = fread (&value, sizeof(value), 1, handle); printf("i: %d wert: %d\n",i,value); fclose (handle); // if // if // main IO7 FB Automatisierung und Informatik: Linux 17 I/O-Funktionen: fopen + binär schreiben void testwrite() { int n=102; fwrite (&n, sizeof(n), 1, handle); // vorher wissen wieviel!! for (int i=-2; i<100; i++) { int n = fwrite (&i, sizeof(i), 1, handle); void testread() { int n; int anz = fread (&n, sizeof(n), 1, handle); for (int i=0; i<n; i++) { anz = fread (&value, sizeof(value), 1, handle); printf("i: %d wert: %d anz: %d \n",i,value, anz); IO8 FB Automatisierung und Informatik: Linux 18 9

Beispielcode: Threads erzeugen // standardisierte Thread Methode void * calc(void *param) { int retcode=0; puts("im thread"); pthread_exit ( (void *) retcode ); gcc t1.c -o t1 -lpthread int main(int argc, char *argv[]) { pthread_t pt1; if ( pthread_create(&pt1, NULL, calc, NULL) ) { fprintf( stderr, "Fehler beim Erzeugen des 1. Threads\n"); exit (EXIT_FAILURE); return EXIT_SUCCESS; FB Automatisierung und Informatik: Linux 19 Beispielcode: Threads erzeugen mit Parameter t2.c struct ThreadRec { int id; long anz; int anzthreads; ; long long summe; void * calc(void *param) { long i; int von, bis, n; struct ThreadRec *pdaten; pdaten = (struct ThreadRec *) (param); int id = pdaten->id; int diff = pdaten->anz / pdaten->anzthreads; von=diff*(id-1)+1; if (id==pdaten->anzthreads) bis=pdaten->anz; else bis=diff*(id); printf("id: %d von:%d bis:%d\n",id, von,bis); for (i=von; i<=bis; i++) { summe+= i; // for FB Automatisierung und Informatik: Linux 20 10

Beispielcode: Threads erzeugen mit Parameter t2.c int main(int argc, char *argv[]) { pthread_t p1,p2; int n=10000; struct ThreadRec tdaten1; struct ThreadRec tdaten2; tdaten1.id=1; tdaten1.anz=n; tdaten1.anzthreads=2; tdaten2.id=2; tdaten2.anz=n; tdaten2.anzthreads=2; summe=0.0; FB Automatisierung und Informatik: Linux 21 Beispielcode: Threads erzeugen mit Parameter t2.c summe=0.0; if ( pthread_create(&p1, NULL, calc, &tdaten1) ) { puts("error beim Erzeugen des 1. Threads"); exit(exit_failure); if ( pthread_create(&p2, NULL, calc, &tdaten2) ) { puts("error beim Erzeugen des 2. Threads"); exit(exit_failure); printf("summe: %ld\n",summe); return 0; gcc t2.c -o t2 -lpthread FB Automatisierung und Informatik: Linux 22 11

Beispielcode: Threads erzeugen mit Parameter t3.c Problem: Die Summe ist null Es fehlt das Warten auf das Ende der Thread Lösung: pthread_join(p1,null); pthread_join(p2,null); FB Automatisierung und Informatik: Linux 23 Beispielcode: Threads erzeugen mit Parameter t4.c Problem: Die Summe ist nicht exakt (Synchronize) Lösung: pthread_mutex_t summutex; for (i=von; i<=bis; i++) { pthread_mutex_lock(&summutex); summe+= i; pthread_mutex_unlock(&summutex); pthread_mutex_init( &summutex, NULL ); FB Automatisierung und Informatik: Linux 24 12

Debugger Programm gdb Konsolen orientiert Vorgehen: vi b.c // schreiben und speichern gcc b.c ggdb3 -o b // übersetzen gdb b // Aufruf des Debuggers run // starten des Programms - l // Anzeige, list um main - r // Starten - n // next, nächster Schritt, ohne Funktion - s // step. Nächster Schritt, mit Funktion FB Automatisierung und Informatik: Linux 25 Optionen r // Starten, komplett Summe: 55 l // Listing um main l 1,30 // Listing von Zeile 1 bis 30 b 23 // Breakpoint setzen auf Zeile 23 r // Starten bis zum ersten Breakpoint oder vollständig // Angezeigt wird IMMER der nächste Befehl n // nächster Befehl, bis zum Ende r // Starten bis zum ersten Breakpoint oder vollständig // Angezeigt wird IMMER der nächste Befehl s // nächster Befehl step, in die Funktion print i // Anzeige des Inhalts von i print s // Anzeige des Inhalts von s whatis i // Anzeige des Typs von i set variable s=0 // ändern der Summe print s // Anzeige des Inhalts von s, Test c // laufen lassen bis zum Ende oder zum nächsten Breakpoint FB Automatisierung und Informatik: Linux 26 13

int summe (int n) { int i, s; s=0; for (i=0; i<=n; i++) s+=i; return s; int main(int argc, char* argv[]) { int i, n, s; int f[10]; n=10; s=summe(n); printf("summe: %d \n",s); for (i=0; i<10; i++) { f[i]=i; i=2; // für Haltepunkt return 0; Testbeispiel für das Debugging FB Automatisierung und Informatik: Linux 27 I/O mit Dateien und Verzeichnissen mkdir(char *path) Anlegen eines Verzeichnisses Rückgabe: 0=okay -1=Fehler ckdir(char *path) rmdir Wechseln in ein Verzeichnis (relativ und absolut) Rückgabe: 0=okay -1=Fehler Löscht ein leeres Verzeichnis Rückgabe: 0=okay -1=Fehler FB Automatisierung und Informatik: Linux 28 14

I/O mit Dateien und Verzeichnissen opendir Neue vereinheitliche Posix-Funktion Dir* dir = opendir(char *path) // "/home/user1" "." Anlegen eines Verzeichnisses Rückgabe: 0=okay -1=Fehler Liefert eine Liste der Einträge struct* dirent diritem = readdir(dir *dir) Gibt den i-ten Eintrag zurück Rückgabe: Fehler: NULL int closedir(dir *dir) Rückgabe: Fehler: NULL struct dirent ino_t d_ino; /* inode number */ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record */ unsigned char d_type; // DT_REG DT_DIR DT_UNKNOWN DT_FIFO DT_SOCK DT_CHR DT_BLK char d_name[256]; /* filename */ FB Automatisierung und Informatik: Linux 29 Aufgaben: Nachbau von mkdir cd ls grep Rekursiv ls -R find FB Automatisierung und Informatik: Linux 30 15