Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου. Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

Σχετικά έγγραφα
Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Συστήματα Αρχείων (Σ.Α.)

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

Εργαστήριο ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ & ΚΑΤΑΛΟΓΩΝ ΣΤΟ UNIX. Εισαγωγή

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1

Βιβλιοθήκη stdio. Προγραμματισμός II 1

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

make Προγραμματισμός II 1

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 18η: Διαχείρηση Αρχείων

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Προγραμματισμό για ΗΜΥ

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

Μεθόδων Επίλυσης Προβλημάτων

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Επεξεργασία Αρχείων Κειµένου

Εισαγωγικό εργαστήριο C

Διαδικαστικός Προγραμματισμός

Μεταφραστής (Compiler)

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Προγραμματισμός Υπολογιστών με C++

ιαφάνειες παρουσίασης #6 (β)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμός συστημάτων UNIX/POSIX

είκτες και Πίνακες (2)

Ανάπτυξη και Σχεδίαση Λογισμικού

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών. Οδηγίες εργαστηρίου. Συστήματα Παράλληλης Επεξεργασίας 9 ο Εξάμηνο

Εργαστήριο 9: Αρχεία

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΣΗΜΕΙΩΣΕΙΣ. Αρχεία και Μεταδεδομένα

Περιεχόμενα. Πρόλογος... 21

Προγραμματισμός Ι. Εργαστήριο 1 ο Περιβάλλον Εργασίας. Νικόλαος Δ. Τσελίκας Κυριακή Θ. Σεκλού

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Οι συναρτήσεις στη γλώσσα C

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

B. Ενσωμάτωση Ιθαγενών Μεθόδων

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Διάλεξη 11: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία

Περιεχόμενα. Πρόλογος... 17

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

Προγραμματισμός Συστημάτων

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Προγραμματισμός Ι (ΗΥ120)

Λειτουργικά Συστήματα

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

Προγραμματισμός Ι. Πολλαπλά Αρχεία. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Λειτουργικά Συστήματα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

Διάλεξη 22η: Επιπλέον στοιχεία της C

Εισαγωγή στην γλώσσα προγραμματισμού C

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι (ΗΥ120)

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

File Management και I/O στο UNIX

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

H ΓΛΩΣΣΑ C. Μάθηµα 17: Είσοδος/Έξοδος: Επικοινωνία µε το Λειτουργικό Σύστηµα. ηµήτρης Ψούνης

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία (Κεφάλαιο , KNK-2ED)

Μεθόδων Επίλυσης Προβλημάτων

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 9: Δυναμική Δέσμευση Μνήμης

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εισαγωγή στον Προγραμματισμό

Transcript:

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

Διαδικαστικά Λογαριασμοί (Accounts) Χρήστης: oslabxyy Αλλαγή password: yppasswd Μηχανήματα danaoscslabecentuagr Νησιά (evia, lemnos, naxos, ) Λοιπά Αρχεία από το σπίτι: ssh Windows: putty,winscp Linux: ssh/scp/sftp δεν υποστηρίζονται USB sticks Mailing list

Το περιβάλλον προγραμματισμού

Μονοπάτια στο σύστημα αρχείων Μονοπάτι (paths): Συμβολοσειρα από αναγνωριστικά χωρισμένα από τον χαρακτήρα / πχ: /this/is/a/path/name Κανόνες: Το μονοπάτι είναι 1 απόλυτο αν ξεκινάει με / -- αφετηρία είναι η αρχή της ιεραρχίας 2 σχετικό (αν όχι) -- αφετηρία είναι ο τρέχων κατάλογος (ΤΚ) Το αναγνωριστικό: σηματοδοτεί τον ΤΚ σηματοδοτεί τον πατέρα του TK

Παραδείγματα μονοπατίων ΤΚ: /home/michelle / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes

Παραδείγματα μονοπατίων ΤΚ: /home/michelle / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes /home/michelle/helloc

Παραδείγματα μονοπατίων ΤΚ: /home/michelle / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes bashrc

Παραδείγματα μονοπατίων ΤΚ: /home/michelle / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes /docs/notes

Παραδείγματα μονοπατίων ΤΚ: /home/michelle / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes //tmp/tmpfile01

Ο φλοιός (shell) prompt (,,<TAB>) Προσωπικός κατάλογος (home directory): $HOME,~ Τρέχων κατάλογος (current directory) $ echo $HOME /home/oslab/oslabf23 $ pwd /home/oslab/oslabf23 $ cd /home/ $ pwd /home $ cd ~ $ pwd /home/oslab/oslabf23 Γραμμή εντολών

Διαχείριση καταλόγων Εντολές - cd: Αλλαγή τρέχοντος καταλόγου - mkdir: Δημιουργία καταλόγου - rmdir: Διαγραφή καταλόγου $ mkdir dir $ cd dir/ $ mkdir -p 1/2/3/4 $ ls 1/2/3 4 $ rmdir -p 1/2/3/4 $ cd / $ rmdir dir/ Γραμμή εντολών

Διαχείριση Αρχείων (+Ανακατεύθυνση) Εντολές - cat: Εκτύπωση - cp: Αντιγραφή - mv: Μετακίνηση - rm: Διαγραφή $ echo "Hello World" > file $ cat file Hello World $ mv file file-1 $ cp file-1 file-2 $ cat file-1 file-2 Hello World Hello World $ rm file-1 file-2 Γραμμή εντολών

Τεκμηρίωση (Documentation) Η εντολή man (man man) Τμήματα (sections) (man 3 printf -- printf(3)) man -k (man -k printf) $ man 2 read NAME read - read from a file descriptor Γραμμή εντολών SYNOPSIS #include <unistdh> ssize_t read(int fd, void *buf, size_t count); DESCRIPTION read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf

Editor(s) vim nano gedit Δύο κατάστασεις: εντολών εισαγωγής κειμένου gvim

Μεταβλητές περιβάλλοντος $HOME: Προσωπικός κατάλαγος χρήστη $PATH: Λίστα καταλόγων που περιέχουν εκτελέσιμα αρχεία Για προγράμματα που δεν υπάρχουν στο $PATH, απαιτείται μονοπάτι πχ /myprog env(1), getenv(3)/setenv(3)

Παραγωγή εκτελέσιμου file1c file2c 1 Compile (Μεταγλώττιση): file1c ( file1s) file1o file1o file2o 2 Link: file1o + file2o exec exec

Παράδειγμα: Hello World! #include <stdioh> helloc int main(int argc, char **argv) { printf("hello World!\n"); return 0; Γραμμή εντολών $ gcc -Wall helloc -o hello $ /hello Hello World!

Παράδειγμα: Hello World! (compiling & linking) Γραμμή εντολών $ gcc -Wall -c helloc $ gcc helloo -o hello $ /hello Hello World!

Πολλαπλά αρχεία #include <stdioh> helloc void hello(const char *name) { printf("hello %s!\n", name); mainc void hello(const char *); int main(int argc, char **argv) { hello("world"); return 0; Γραμμή εντολών $ gcc -Wall -c mainc $ gcc -Wall -c helloc $ gcc maino helloo -o hello $ /hello Hello World!

Επικεφαλίδες Διεπαφή προς άλλα κομμάτια κώδικα (API) Περιέχουν πρότυπα και δηλώσεις Συναρτήσεις Καθολικές (global) μεταβλητές h αρχεία preprocessor: #include "headerh"

Επικεφαλίδες: Παράδειγμα void hello(const char *); helloh helloc #include <stdioh> void hello(const char *name) { printf("hello %s!\n", name); #include "helloh" mainc int main(int argc, char **argv) { hello("world"); return 0;

Στοίβα (stack) Αυτόματη αύξηση μεγέθους Όχι για πολλά δεδομένα (8 MB) void foo(double *); stackc int main(int argc, char **argv) { double matrix[1048576]; foo(matrix); return 0; sub mov callq xor add retq $0x800008,%rsp %rsp,%rdi f <main+0xf> %eax,%eax $0x800008,%rsp stacks

Διαχείριση μνήμης Σωρός (Heap) -- malloc / free #include <stdioh> #include <stdlibh> void foo(double *); mallocc int main(int argc, char **argv) { double *array; array = malloc(1048576*sizeof(double)); if (!array){ printf("error in allocation\n"); return 1; foo(array); free(array); return 0;

Ορίσματα Προγράμματος int main(int argc, char **argv) argc: Αριθμός ορισμάτων προγράμματος argv: Πίνακας με τα ορίσματα argv[0]: Το όνομα του προγράμματος βοηθητική βιβλιοθήκη: getopt(3) argsc #include <stdioh> int main(int argc, char **argv) { int i; for (i=0; i<argc; i++) printf("%d %s\n", i, argv[i]); return 0; Γραμμή εντολών $ /args arg1 arg2 0 /args 1 arg1 2 arg2

Διεπαφή για αρχεία Ανάγνωση: - Άνοιγμα (open) - Ανάγνωση σε μνήμη (read) - Κλείσιμο (close) Εγγραφή: - Άνοιγμα (open) - Εγγραφή από μνήμη (write) - Κλείσιμο (close) Από (εγγραφή) και Πρός (ανάγνωση) τη μνήμη υπάρχουν εξαιρέσεις (πχ sendfile()) Η open επιστρέφει έναν ακέραιο (file descriptor) που λειτουργεί ως αναγνωριστικο για τις υπόλοιπες κλήσεις συστήματος (read,write,κλπ) Διαθέσιμα αναγνωριστικά στην έναρξη του προγράμματος: 0: είσοδος (stdin) 1: έξοδος (stdout) 2: έξοδος σφαλμάτων (stderr)

Παράδειγμα read #include <unistdh> #include <stdioh> readc int main(int argc, char **argv) { char buff[1024]; ssize_t rcnt; for (;;){ rcnt = read(0,buff,sizeof(buff)-1); if (rcnt == 0) /* end-of-file */ return 0; if (rcnt == -1){ /* error */ perror("read"); return 1; buff[rcnt] = '\0'; fprintf(stdout, "%s", buff);

Παράδειγμα write writec #include <unistdh> #include <stdioh> #include <stringh> int main(int argc, char **argv){ char buff[1024]; size_t len, idx; ssize_t wcnt; for (;;){ if (fgets(buff,sizeof(buff),stdin) == NULL) return 0; idx = 0; len = strlen(buff); do { wcnt = write(1,buff + idx, len - idx); if (wcnt == -1){ /* error */ perror("write"); return 1; idx += wcnt; while (idx < len);

Παράδειγμα open (για ανάγνωση) #include <sys/typesh> #include <sys/stath> #include <fcntlh> #include <stdioh> #include <stdlibh> #include <unistdh> open-readc int main(int argc, char **argv) { int fd; fd = open("filename", O_RDONLY); if (fd == -1){ perror("open"); exit(1); // perform write() close(fd); return 0;

Παράδειγμα open (για εγγραφή) #include <sys/typesh> #include <sys/stath> #include <fcntlh> #include <stdioh> #include <stdlibh> #include <unistdh> open-writec int main(int argc, char **argv) { int fd, oflags, mode; oflags = O_CREAT O_WRONLY O_TRUNC; mode = S_IRUSR S_IWUSR; fd = open("filename", oflags, mode); if (fd == -1){ perror("open"); exit(1); // perform write() close(fd); return 0;

Παράδειγμα open (για εγγραφή) open-writec #include - oflags: <sys/typesh> #include <sys/stath> O_CREAT : Δημιουργία αρχείου αν δεν υπάρχει #include <fcntlh> #include O_WRONLY: <stdioh> Εγγραφή (μόνο) #include O_TRUNC <stdlibh> : Μηδενισμός αρχείου αν υπάρχει #include - mode: <unistdh> int main(int S_IRUSR argc, : δικαίωμα char **argv) ανάγνωσης στον κάτοχο { S_IWUSR: δικαίωμα εγγραφής στον κάτοχο int fd, oflags, mode; oflags = O_CREAT O_WRONLY O_TRUNC; mode = S_IRUSR S_IWUSR; fd = open("filename", oflags, mode); if (fd == -1){ perror("open"); exit(1); // perform write() close(fd); return 0;