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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 1 Εισαγωγή στη C

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

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

Η γλώσσα προγραμματισμού C

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

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

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

Λειτουργικό σύστημα Unix

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

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

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

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

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

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

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

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

Εισαγωγή στο προγραμματιστικό περιβάλλον ANSI

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

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

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

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

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

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

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

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

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

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

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

Δίκτυα Η/Υ στην Επιχείρηση

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Transcript:

1 Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου Λειτουργικά Συστήματα 7ο εξάμηνο ΣΗΜΜΥ ακ έτος 2016-2017 http://wwwcslabecentuagr/courses/os CSLab National Technical University of Athens Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ Οκτώβριος 2016

Εργαστήριο 2 Εργαστηριακές Ασκήσεις Πέμπτη 11-13 13-15 15-17 17-19 19-21 Παρασκευή 11-13 13-15 Εξέταση ασκήσεων: ασκήσεις που δεν εξετάζονται εμπρόθεσμα θα έχουν βαθμολογική επιβάρυνση

Ασκήσεις 3 Περιβάλλον Linux Προγραμματισμός σε C Τυπική διαδικασία: Εκφώνηση Παρουσίαση (περιέχει ό,τι χρειάζεται για τη λύση) Επίδειξη Αναφορά (μία εβδομάδα μετά) κώδικας έξοδος προγράμματος απάντησεις σε ερωτήσεις Σύνοπτικές απαντήσεις!

4 Βιβλιογραφία για το εργαστήριο Βιβλία The C Programming Language (K&R) Brian Kernighan and Dennis Ritchie Advanced Programming in the UNIX Environment W Richard Stevens The Linux Programming Interface Michael Kerrisk Linux System Programming: Talking Directly to the Kernel and C Library Robert Love Σύνδεσμοι τεκμηρίωσης Linux man-pages: http://wwwkernelorg/doc/man-pages/ GNU C library: http://wwwgnuorg/software/libc/manual/

Διαδικαστικά 5 Λογαριασμοί (Accounts) Χρήστης: oslabxyy Αλλαγή password: yppasswd Μηχανήματα orioncslabecentuagr Μηχανήματα φοιτητών (evia, lemnos, naxos, ) student-pc: Εκτέλεση από το orion, για σύνδεση σε τυχαίο μηχάνημα φοιτητών Λοιπά Αρχεία από το σπίτι: ssh Windows: putty,winscp Linux: ssh/scp/sftp δεν υποστηρίζονται USB sticks Mailing list

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

Σύστημα αρχείων Ιεραρχική δομή / (root) home/ tmp/ john/ michelle/ paul/ tmpfile01 tmpfile02 bashrc helloc docs/ report notes Κατάλογοι Αρχεία 7

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

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

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

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

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

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

10 Ο φλοιός (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 Γραμμή εντολών

11 Διαχείριση καταλόγων Εντολές - 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 12

13 Τεκμηρίωση (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) 14 vim nano gedit Δύο κατάστασεις: εντολών εισαγωγής κειμένου gvim

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

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

Παράδειγμα: Hello World! 17 #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) 18 $ gcc -Wall -c helloc $ gcc helloo -o hello $ /hello Hello World! Γραμμή εντολών

Πολλαπλά αρχεία 19 #include <stdioh> helloc void hello(const char *name) { printf("hello %s!\n", name); void hello(const char *); mainc 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!

Επικεφαλίδες 20 Διεπαφή προς άλλα κομμάτια κώδικα (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; 21

Ορίσματα Προγράμματος 22 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

Αρχεία 23 όνομα/μονοπάτι (πχ /home/michelle/helloc) δεδομένα/περιεχόμενα (πχ int main() ) μέτα-δεδομένα (πχ ημερομηνία τελευταίας πρόσβασης) persistent (παραμένουν μετά το κλείσιμο του υπολογιστή) "Everything is a file" (ρητό του Unix) Για την πρόσβαση σε αυτά χρησιμοποιούμε: κλήσεις συστήματος (system calls)

24 Κλήσεις συστήματος (system calls) Προγραμματιστική διεπαφή για τις υπηρεσίες που προσφέρει το ΛΣ στις εφαρμογές Πρόγραμμα 1 Kλήση συστήματος 2 Έλεγχος ορισμάτων 4 Επιστροφή 3 Εκτέλεση Χώρος Πυρήνα

25 Βασικές κλήσεις Ε/Ε (open,read,close) Πρόγραμμα buff Χώρος Πυρήνα

25 Βασικές κλήσεις Ε/Ε (open,read,close) Πρόγραμμα 5 buff open /path/to/file/name Χώρος Πυρήνα file

25 Βασικές κλήσεις Ε/Ε (open,read,close) Πρόγραμμα 5 x buff read(5, buff, size) x copy Χώρος Πυρήνα x file

25 Βασικές κλήσεις Ε/Ε (open,read,close) Πρόγραμμα 5 x buff read(5, buff, size) read(5, buff, size) x copy Χώρος Πυρήνα file x

25 Βασικές κλήσεις Ε/Ε (open,read,close) Πρόγραμμα buff close(5) (OK) Χώρος Πυρήνα

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

27 Παράδειγμα 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 #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); writec 28

29 Παράδειγμα 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 read() 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 O_CREAT <sys/stath> : Δημιουργία αρχείου αν δεν υπάρχει #include <fcntlh> O_WRONLY: Εγγραφή (μόνο) #include <stdioh> #include O_TRUNC <stdlibh> : Μηδενισμός αρχείου αν υπάρχει #include - mode: <unistdh> S_IRUSR : δικαίωμα ανάγνωσης στον κάτοχο int main(int 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; 30

Makefile(s) 31 Eφαρμογή make Xρήση για την αυτόματη δημιουργία προγραμάτων από αρχεία κώδικα Διαδικασία: Συγγραφή αρχείου Makefile που περιέχει κανόνες Κλήση εντολής make για την παραγωγή του προγράμματος Κανόνες: Αρχείο-στόχος (target) Αρχεία-απαιτήσεις (prerequisites) Εντολή παραγωγής στόχου απο απαιτούμενα αρχεία Παράδειγμα: target : prerequisites command

Παράδειγμα Makefile Makefile hello: helloo maino gcc -o hello helloo maino helloo: helloc gcc -Wall -c helloc maino: mainc gcc -Wall -c mainc Γραμμή εντολων $ make gcc -Wall -c helloc gcc -Wall -c mainc gcc -o hello helloo maino $ make make: `hello' is up to date $ edit mainc $ make gcc -Wall -c mainc gcc -o hello helloo maino 32

33 strace Εφαρμογή Εκτέλεση προγράμματος που δίδεται ως όρισμα Καταγραφή των κλήσεων συστήματος που πραγματοποιούνται Χρήσιμο για εντοπισμό λαθών

Παράδειγμα strace 34 Γραμμή εντολων $ echo 'Hello World!' > hello $ cat hello Hello World! $ strace cat hello execve("/bin/cat", ["cat", "hello"], [/* 52 vars */]) = 0 open("hello", O_RDONLY) = 3 read(3, "Hello World!\n", 32768) = 13 write(1, "Hello World!\n", 13Hello World! ) = 13 read(3, "", 32768) = 0

Στοίχιση (indentation) Δεν είναι απαραίτητη για να μεταγλωττιστεί το πρόγραμμα Είναι απαραίτητη για να είναι κατανοήτο if-else int main(void) { blah(); return 0; main void func() { if (condition) { this(); that(); else { other(); whatever(); Πρόγραμμα cslab-indent Περισσότερες πληροφορίες: http://wwwcslabecentuagr/courses/os/ql/indenthtml 35

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

37 Διαχείριση μνήμης Σωρός (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;