Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:"— Μεταγράφημα παρουσίασης:

1 ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ nickie@softlab.ntua.gr Διδάσκων: Νίκος Παπασπύρου http://www.softlab.ntua.gr/~nickie/TUC/log201/ 1Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διαφάνειες παρουσίασης #10 4 Ροές δεδομένων εισόδου / εξόδου στη C++ 4 Διεργασίες στο Unix 4 Προγραμματισμός διεργασιών

2 2Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Ροές εισόδου / εξόδου(iii) u Έλεγχος σφαλμάτων eof, bad, fail, good, clear u Μορφή εισόδου / εξόδου width μήκος εκτύπωσης fill χαρακτήρας γεμίσματος precision ακρίβεια δεκαδικών αριθμών setf άλλες παράμετροι εκτύπωσης l σύστημα αρίθμησης (δεκαδικό, κ.λπ.) l δεκαδικοί αριθμοί με μορφή εκθέτη l στοίχιση εκτύπωσης (αριστερά, δεξιά, κ.λπ) l εξαγωγή κενών χαρακτήρων

3 3Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Ροές εισόδου / εξόδου(iv) u Παράδειγμα #include int main () { cout.width(10); cout.fill('#'); cout.setf(ios::hex, ios::basefield); cout.setf(ios::uppercase); cout << 3241 << endl; return 0; } #######CA9

4 4Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Ροές εισόδου / εξόδου(v) u Manipulators endl, flush setw, setbase, setfill, setprecision setiosflags, resetiosflags u Παράδειγμα cout << setw(10) << setfill('#') << setbase(16) << setiosflags(ios::uppercase) << 3241 << endl;

5 5Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Υλοποίηση εισόδου / εξόδου(i) u Παράδειγμα class complex { //... friend ostream operator << ( ostream & s, const complex & c); friend istream operator >> ( istream & s, complex & c); }; complex c; cin >> c; cout << c;

6 6Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Υλοποίηση εισόδου / εξόδου(ii) u Παράδειγμα ostream operator << (ostream & s, const complex & c) { s << c.re; if (c.im > 0) s << "+j" << c.im; else if (c.im < 0) s << "-j" << fabs(c.im); return s; }

7 7Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Ροές αρχείων εισόδου / εξόδου #include int main () { ifstream fin ("source.txt"); ofstream fout ("target.txt"); if (!fin || !fout) { cerr << "Cannot open files!\n"; return 1; } char c; while (fout && fin.get(c)) fout.put(c); return 0; }

8 8Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διεργασίες στο Unix(i) u Διεργασία (process): ένα πρόγραμμα που εκτελείται σε ένα σύστημα Unix u Το Unix υποστηρίζει την ταυτόχρονη εκτέλεση περισσότερων διεργασιών u Με τον τρόπο αυτό υποστηρίζονται: l πολλοί χρήστες (multi-user) l πολλές εργασίες (multi-tasking) u Μια διεργασία μπορεί να δημιουργήσει άλλες διεργασίες l Διεργασία παιδί (child process) l Διεργασία γονέας (parent process)

9 9Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διεργασίες στο Unix(ii) u Χαρακτηριστικά διεργασιών: l κωδικός διεργασίας (process ID) l κωδικός διεργασίας γονέα (parent process ID) l πραγματικός κωδικός χρήστη και ομάδας (real user ID, real group ID) l ισχύων κωδικός χρήστη και ομάδας (effective user ID, effective group ID) u Κάθε διεργασία έχει δικό της: l χώρο αποθήκευσης μεταβλητών l στοίβα εκτέλεσης l ανοιχτά αρχεία l άλλες παραμέτρους εκτέλεσης

10 10Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διεργασία παιδί int x3 Διεργασίες στο Unix(iii) u Δημιουργία νέας διεργασίας l Αμέσως μετά τη δημιουργία νέας διεργασίας, οι τιμές των μεταβλητών της διεργασίας παιδιού και της διεργασίας γονέα συμπίπτουν l Αργότερα όμως, μπορούν να μεταβάλλονται ανεξάρτητα Διεργασία γονέας int x3 5

11 11Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Προγραμματισμός διεργασιών(i) u Δημιουργία νέας διεργασίας pid_t fork (); u Πληροφορίες σχετικά με διεργασίες pid_t getpid (); pid_t getppid (); gid_t getgid (); uid_t getuid (); gid_t getegid (); uid_t geteuid (); u Πρόωρος τερματισμός διεργασίας void _exit (int status); void exit (int status);

12 12Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Προγραμματισμός διεργασιών(ii) #include int main () { pid_t i = fork(); if (i == 0) cout << "Child: PID=" << getpid() << ", PPID=" << getppid() << endl; else cout << "Parent: PID=" << getpid() << ", PPID=" << getppid() << endl; return 0; }

13 13Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Προγραμματισμός διεργασιών(iii) u Αναμονή τερματισμού διεργασίας pid_t wait (int * status); pid_t waitpid (pid_t i, int * status, int options); u Εκτέλεση προγραμμάτων int execl (const char * path, const char * arg0,...); int execv (const char * path, char * const argv[]); int system (const char * cmd); Αναζήτηση εκτελέσιμων στο τρέχον μονοπάτι αναζήτησης ( $PATH ): execp, execvp


Κατέβασμα ppt "ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google