Περιγραφητές αρχείων µετά από...
TRANSCRIPT
1
Περιγραφητές αρχείων µετά από execl…Για όλες τις συναρτήσεις execl, execv, execlp, execvp…Οι περιγραφητές αρχείων παραµένουν ανοικτοί για το καλούµενο από την execπρόγραµµαΠώς να χρησιµοποιηθούν όµως, αφού όχι κοινές µεταβλητές?Χρήση περιγραφητών 0,1,2Πέρασµα περιγραφητών ως ορίσµατα στο καλούµενο πρόγραµµαΠαράδειγµα connectTest.c και connector.c
2
connectTest.c
Τι θα γίνει αν κλείσω εδώ και τα READ
άκρα? -SIGPIPE
3
connector.c
4
Εκτέλεση ελέγχου
5
Παρόµοια, ανακατεύθυνση stdout
Μικρότερος διαθέσιµος
περιγραφητήςείναι το 1!!!
6
Επικοινωνία διεργασιών σε διαφορετικούς υπολογιστές
Συνήθως µοντέλο πελάτη-εξυπηρετητή (client-server)Ο εξυπηρετητής παρέχει κάποια υπηρεσίαΟ εξυπηρετητής περιµένει να δεχτεί συνδέσεις από πελάτεςΠολλοί πελάτες συνδέονται για να χρησιµοποιήσουν την υπηρεσίαΠελάτης-εξυπηρετητής µιλάνε απευθείας
7
Πρωτόκολλο TCP
Transmission Control ProtocolΧρήση επιβεβαιώσεων (acknowledgments) και επαναµεταδόσεις µη επιβεβαιωµένων µηνυµάτωνΤο πρόγραµµα “βλέπει” τα δεδοµένα στη σωστή σειρά (δεν τοποθετούνται ανακατωµένα τα πακέτα)
Αναµονή συνδέσεων
Εδώ τελικά επικοινωνεί µε τον πελάτη
8
Πολλοί Πελάτες
9
Πρωτόκολλο UDP
User Datagram ProtocolΕπικοινωνία χωρίς σταθερή σύνδεσηΑνταλλαγή απλών µηνυµάτων µεταξύ εξυπηρετητή-πελατώνΜηνύµατα µπορούν να χαθούν, φτάσουν µε λάθος σειρά
10
Σύγκριση TCP-UDP
SOCK_DGRAMSOCK_STREAMΕΙ∆ΟΣ ΥΠΟ∆ΟΧΗΣ
ΌΧΙΝΑΙ∆ΙΑ∆ΟΧΙΚΟΤΗΤΑ ΜΗΝΥΜΑΤΩΝ
ΝΑΙΌΧΙΟΡΙΑ ΜΗΝΥΜΑΤΩΝ
ΌΧΙΝΑΙΑΞΙΟΠΙΣΤΙΑ
ΌΧΙΝΑΙΑΠΑΙΤΗΣΗ ΣΥΝ∆ΕΣΗ
UDPTCP
11
Σειριακός Εξυπηρετητής
ΜΕΙΟΝΕΚΤΗΜΑΤΑ1) Ένα πελάτη τη φορά, µέχρι να
τελειώσει ο πελάτης2) Αιτήσεις άλλων πελατών περιµένουν
και µπορεί να αποτύχουν
ΠΑΝΤΑ
12
Πιο Σύνηθες
Ο εξυπηρετητής γεννάει ένα παιδί για κάθε πελάτη
ΜΕΙΟΝΕΚΤΗΜΑΠάρα πολλά παιδιά αν πολλοί πελάτες
13
Λειτουργία
Λειτουργία Πατέρα
Λειτουργία ΠαιδιούΠΑΝΤΑ
14
Ερωτήσεις
Γιατί ο πατέρας εξυπηρετητής να κλείνει τον περιγραφητή? Για να µη ξεµείνει από περιγραφητέςΓια να µπορεί ο πελάτης να διαγνώσει EOF µε τη read (όπως στους σωλήνες, αν όχι δεδοµένα και η άλλη πλευρά κλείσει το άκρο)
15
Εναλλακτικό Μοντέλο
Πολλές διεργασίες παιδιάΚαινούργιες συνδέσεις κατανέµονται σε αυτά.
ΜΕΙΟΝΕΚΤΗΜΑΣυγχρονισµός παιδιών για διάβασµα δεδοµένων πελατών (πχ από σωλήνα)
Το ίδιο γίνεται και µε διεργασίες
16
Χρήσιµες Γνώσεις…
Πχ, SUN vs Intel αρχιτεκτονικές
17
Χρήσιµες Γνώσεις (2)
18
Συνάρτηση bind
19
struct sockaddr unsigned short sa_family; // address family, AF_xxxchar sa_data[14]; // 14 bytes of protocol address
;
struct sockaddr_in short int sin_family; // Address familyunsigned short int sin_port; // Port numberstruct in_addr sin_addr; // Internet addressunsigned char sin_zero[8];
; // Same size as struct sockaddr
struct in_addr unsigned long s_addr; // that's a 32-bit long, or 4 bytes
;
sockaddr vs sockaddr_in
2+4+8=14
20
Συναρτήσεις connect, listen, accept
≈ 5
Συνδέσου εδώ
21
Συναρτήσεις bzero, bcopy
Αντίθετα από memcpy
22
Αν ο εξυπηρετητής πάει να γράψει σε socket που έχει κλείσει ο πελάτης, τότε σήµα SIGPIPE
Να βάζετε στην αρχή χειριστή του σήµατος SIGPIPE
Για γρήγορη επαναχρησιµοποίηση των ports ενός socket, κάντε χρήση της συνάρτησης setsockopt(παράδειγµα 18.6 στο ebook)
Πρακτικές λύσεις
23
TCP Επικοινωνία
24
Παράδειγµα int_str_server.c
25
Παράδειγµα int_str_server.c (2)
26
27
Αποτέλεσµα Εκτέλεσης
28
Συναρτήσεις sendto, recvfrom
29
UDP Επικοινωνία
bind, όχι connect
30
Παράδειγµα int_dgr_server.c
Αυτόµατη επιλογή
Βρες πραγµατικό port
31
Παράδειγµα int_dgr_client.c
32
Εκτέλεση Προγράµµατος
33
Παράδειγµα rls.c
34
Παράδειγµα rlsd.c
35
Παράδειγµα rlsd.c (συν.)
Αντί για ανακατεύθυνση εντολής σε αρχείο, popen.
Μπορώ να διαβάσω ή γράψω µε popen. ΌΧΙ και τα 2 µαζί
36
Εκτέλεση Προγράµµατος
37
Παλιό Θέµα (1)
38
Παλιό Θέµα (2)
39
Παλιό Θέµα (3)
include <stdlib.h>