39
1 Περιγραφητές αρχείων μετά από execl… Για όλες τις συναρτήσεις execl, execv, execlp, execvp… Οι περιγραφητές αρχείων παραμένουν ανοικτοί για το καλούμενο από την exec πρόγραμμα Πώς να χρησιμοποιηθούν όμως, αφού όχι κοινές μεταβλητές? Χρήση περιγραφητών 0,1,2 Πέρασμα περιγραφητών ως ορίσματα στο καλούμενο πρόγραμμα Παράδειγμα connectTest.c και connector.c

Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

1

Περιγραφητές αρχείων µετά από execl…Για όλες τις συναρτήσεις execl, execv, execlp, execvp…Οι περιγραφητές αρχείων παραµένουν ανοικτοί για το καλούµενο από την execπρόγραµµαΠώς να χρησιµοποιηθούν όµως, αφού όχι κοινές µεταβλητές?Χρήση περιγραφητών 0,1,2Πέρασµα περιγραφητών ως ορίσµατα στο καλούµενο πρόγραµµαΠαράδειγµα connectTest.c και connector.c

Page 2: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

2

connectTest.c

Τι θα γίνει αν κλείσω εδώ και τα READ

άκρα? -SIGPIPE

Page 3: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

3

connector.c

Page 4: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

4

Εκτέλεση ελέγχου

Page 5: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

5

Παρόµοια, ανακατεύθυνση stdout

Μικρότερος διαθέσιµος

περιγραφητήςείναι το 1!!!

Page 6: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

6

Επικοινωνία διεργασιών σε διαφορετικούς υπολογιστές

Συνήθως µοντέλο πελάτη-εξυπηρετητή (client-server)Ο εξυπηρετητής παρέχει κάποια υπηρεσίαΟ εξυπηρετητής περιµένει να δεχτεί συνδέσεις από πελάτεςΠολλοί πελάτες συνδέονται για να χρησιµοποιήσουν την υπηρεσίαΠελάτης-εξυπηρετητής µιλάνε απευθείας

Page 7: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

7

Πρωτόκολλο TCP

Transmission Control ProtocolΧρήση επιβεβαιώσεων (acknowledgments) και επαναµεταδόσεις µη επιβεβαιωµένων µηνυµάτωνΤο πρόγραµµα “βλέπει” τα δεδοµένα στη σωστή σειρά (δεν τοποθετούνται ανακατωµένα τα πακέτα)

Αναµονή συνδέσεων

Εδώ τελικά επικοινωνεί µε τον πελάτη

Page 8: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

8

Πολλοί Πελάτες

Page 9: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

9

Πρωτόκολλο UDP

User Datagram ProtocolΕπικοινωνία χωρίς σταθερή σύνδεσηΑνταλλαγή απλών µηνυµάτων µεταξύ εξυπηρετητή-πελατώνΜηνύµατα µπορούν να χαθούν, φτάσουν µε λάθος σειρά

Page 10: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

10

Σύγκριση TCP-UDP

SOCK_DGRAMSOCK_STREAMΕΙ∆ΟΣ ΥΠΟ∆ΟΧΗΣ

ΌΧΙΝΑΙ∆ΙΑ∆ΟΧΙΚΟΤΗΤΑ ΜΗΝΥΜΑΤΩΝ

ΝΑΙΌΧΙΟΡΙΑ ΜΗΝΥΜΑΤΩΝ

ΌΧΙΝΑΙΑΞΙΟΠΙΣΤΙΑ

ΌΧΙΝΑΙΑΠΑΙΤΗΣΗ ΣΥΝ∆ΕΣΗ

UDPTCP

Page 11: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

11

Σειριακός Εξυπηρετητής

ΜΕΙΟΝΕΚΤΗΜΑΤΑ1) Ένα πελάτη τη φορά, µέχρι να

τελειώσει ο πελάτης2) Αιτήσεις άλλων πελατών περιµένουν

και µπορεί να αποτύχουν

ΠΑΝΤΑ

Page 12: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

12

Πιο Σύνηθες

Ο εξυπηρετητής γεννάει ένα παιδί για κάθε πελάτη

ΜΕΙΟΝΕΚΤΗΜΑΠάρα πολλά παιδιά αν πολλοί πελάτες

Page 13: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

13

Λειτουργία

Λειτουργία Πατέρα

Λειτουργία ΠαιδιούΠΑΝΤΑ

Page 14: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

14

Ερωτήσεις

Γιατί ο πατέρας εξυπηρετητής να κλείνει τον περιγραφητή? Για να µη ξεµείνει από περιγραφητέςΓια να µπορεί ο πελάτης να διαγνώσει EOF µε τη read (όπως στους σωλήνες, αν όχι δεδοµένα και η άλλη πλευρά κλείσει το άκρο)

Page 15: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

15

Εναλλακτικό Μοντέλο

Πολλές διεργασίες παιδιάΚαινούργιες συνδέσεις κατανέµονται σε αυτά.

ΜΕΙΟΝΕΚΤΗΜΑΣυγχρονισµός παιδιών για διάβασµα δεδοµένων πελατών (πχ από σωλήνα)

Το ίδιο γίνεται και µε διεργασίες

Page 16: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

16

Χρήσιµες Γνώσεις…

Πχ, SUN vs Intel αρχιτεκτονικές

Page 17: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

17

Χρήσιµες Γνώσεις (2)

Page 18: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

18

Συνάρτηση bind

Page 19: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

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

Page 20: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

20

Συναρτήσεις connect, listen, accept

≈ 5

Συνδέσου εδώ

Page 21: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

21

Συναρτήσεις bzero, bcopy

Αντίθετα από memcpy

Page 22: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

22

Αν ο εξυπηρετητής πάει να γράψει σε socket που έχει κλείσει ο πελάτης, τότε σήµα SIGPIPE

Να βάζετε στην αρχή χειριστή του σήµατος SIGPIPE

Για γρήγορη επαναχρησιµοποίηση των ports ενός socket, κάντε χρήση της συνάρτησης setsockopt(παράδειγµα 18.6 στο ebook)

Πρακτικές λύσεις

Page 23: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

23

TCP Επικοινωνία

Page 24: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

24

Παράδειγµα int_str_server.c

Page 25: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

25

Παράδειγµα int_str_server.c (2)

Page 26: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

26

Page 27: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

27

Αποτέλεσµα Εκτέλεσης

Page 28: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

28

Συναρτήσεις sendto, recvfrom

Page 29: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

29

UDP Επικοινωνία

bind, όχι connect

Page 30: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

30

Παράδειγµα int_dgr_server.c

Αυτόµατη επιλογή

Βρες πραγµατικό port

Page 31: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

31

Παράδειγµα int_dgr_client.c

Page 32: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

32

Εκτέλεση Προγράµµατος

Page 33: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

33

Παράδειγµα rls.c

Page 34: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

34

Παράδειγµα rlsd.c

Page 35: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

35

Παράδειγµα rlsd.c (συν.)

Αντί για ανακατεύθυνση εντολής σε αρχείο, popen.

Μπορώ να διαβάσω ή γράψω µε popen. ΌΧΙ και τα 2 µαζί

Page 36: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

36

Εκτέλεση Προγράµµατος

Page 37: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

37

Παλιό Θέµα (1)

Page 38: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

38

Παλιό Θέµα (2)

Page 39: Περιγραφητές αρχείων µετά από execl…cgi.di.uoa.gr/~spro/lectures/5.Sockets.pdf · 1 Περιγραφητές αρχείων µετά από execl… Για

39

Παλιό Θέµα (3)

include <stdlib.h>