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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Α. 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

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

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

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

Transcript:

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

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

http://wwwkernelorg/doc/man-pages/ http://wwwgnuorg/software/libc/manual/

yppasswd student-pc

Σύστημα αρχείων Ιεραρχική δομή / (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 file1o file2o 2 Link: file1o + file2o exec 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); 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!

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

Επικεφαλίδες: Παράδειγμα 21 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;

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

30 Παράδειγμα 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;

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

36 Στοίβα (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

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;