Home
Aide à la programmation en C sur les Sockets
Contents
1. 5 Les descripteurs de fichiers Cette section ne concerne que les appels syst mes associ s l utilisation de fichiers Les fonc tions de la biblioth que standard d entr es sorties ayant des fonctionnalit s comparables sont d crites dans la section suivante Ces appels syst me sont des op rations de bas niveau adapt es certains types de manipulation de fichiers comme par exemple des critures brutales i e sans formatage de donn es stock es de fa on contigu en m moire 13 Cr ation d une socket s socket Renseignement de la structure sockaddr_in par l adresse et le port locaux Association la socket bind v Demande de connexion au serveur connect v Dialogue avec le serveur read write Fermeture de la socket de communication close s FIG 1 Canevas du client utilisant TCP Le syst me d exploitation tient jour une table appel e table des fichiers ouverts o sont r f renc s tous les fichiers utilis s c est dire tous les fichiers en train d tre manipul s par un processus cr ation criture lecture Le mot fichier ne doit pas tre compris ici au sens fichier sur le disque dur mais comme une entit pouvant contenir ou transmettre des donn es Un descripteur de fichier peut aussi bien faire r f rence un fichier du disque dur un terminal une connexion r seau ou un lecteur de bande Magn tique Un certain nombre d op
2. comme si rien ne s tait pass e Le signal est tout simplement ignor 22 e Le signal provoque l arr t du processus avec ou sans g n ration d un fichier core Lorsqu un processus re oit un signal pour lequel il n a pas indiqu de fonction de traitement le syst me d exploitation adopte une r action par d faut qui varie suivant les signaux e soit il ignore le signal e soit il termine le processus avec ou sans g n ration d un fichier core Vous avez certainement toutes et tous d j utilis des signaux consciemment en tapant Control C ou en employant la commande ki11 ou inconsciemment lorsqu un de vos programmes a affich segmentation fault core dumped 7 5 Liste et signification des diff rents signaux La liste des signaux d pend du type d UNIX La norme POSIX 1 en sp cifie un certain nombre parmi les plus r pandus On peut n anmoins d gager un grand nombre de signaux communs toutes les versions d UNIX SIGHUP rupture de ligne t l phonique Du temps o certains terminaux taient reli s par ligne t l phonique un ordinateur distant ce signal tait envoy aux processus en cours d ex cution sur l ordinateur lorsque la liaison vers le terminal tait coup e Ce signal est maintenant utilis pour demander des d mons processus lanc s au d marrage du syst me et tournant en t che de fond de relire leur fichier de configuration SIGINT interruption c est le signal
3. rations g n riques sont d finies sur les descripteurs de fichier qui sont ensuite traduites par le syst me en fonction du p riph rique auquel se rapporte ce descripteur Ainsi crire une cha ne de caract res l cran ou dans un fichier se fera pour l utilisateur de la m me mani re D autres op rations sont sp cifiques au type de descripteur de fichier socket par exemple 5 1 Les primitives associ s aux descripteurs de fichier Les d clarations des appels syst me d crits dans cette section se trouvent dans les fichiers suivants usr include unistd h usr include sys types h usr include sys stat h usr include fcntl h 5 1 1 L appel syst me open int open const char xpath int flags mode t mode Il permet d associer un descripteur de fichier un fichier que l on souhaite manipuler En cas de succ s le syst me d exploitation va cr er une r f rence dans la table des fichiers et va indiquer 14 Cr ation d une socket s socket Renseignement de la structure sockaddr_in Association la socket bind y Mise en coute de la socket listen R cup ration de la socket de communication avec un client s_c accept y Cr ation d un processus fils Processus fils fork pid 0 Fermeture de la socket de communication close s_c Fermeture de la socket de passive close s Y Dialogue avec un client read write Fermeture de connexion client close
4. e AF_INET pour IP e unsigned short sin port est le port affecter la structure 0 pour une allocation dynamique c t client e unsigned long sin addr s addr est l adresse IP affecter la structure Dans le cas de l adresse locale d un serveur ce sera la constante IN_ADDR ANY pour pouvoir recevoir des demandes sur toutes les interfaces possibles du serveur La fonction memset permet d initialiser globalement la structure z ro afin de supprimer toute valeur parasite Exemple struct hostent p_info_serveur pointeur sur infos serveur struct p_info_service struct sockaddr_in p_adr_serv char serveur nom du serveur soit DNS soit en d cimale point e Mise a zero de la structure d adresse socket memset char p_adr_serv 0 sizeof p_adr_serv Definition du domaine famille p adr_serv gt sin_family AF_INET RENSEIGNE adresse IP if serveur INADDR_ANY Cas d un serveur p_adr_serv gt sin_addr s_addr htonl INADDR_ANY else p_info_serveur gethostbyname serveur if p_info_serveur Serveur reference dans etc hosts ou DNS memcpy char amp p_adr_serv gt sin_addr p_info_serveur gt h_addr p_info_serveur gt h_length ici pas besoin de htonl else Adresse IP sous forme de decimale pointee sous forme de chaine de car p_adr_serv gt sin_addr s_addr inet_a
5. qui est envoy un processus quand on tape Control C au clavier SIGFPE erreur de calcul en virgule flottante le plus souvent une division par z ro SIGKILL tue le processus SIGBUS erreur de bus SIGSEGV violation de segment g n ralement cause d un pointeur nul SIGPIPE tentative d criture dans un tuyau qui n a plus de lecteurs voir tuyaux SIGALRM G n r par la fonction alarm int NbSeconde SIGTERM demande au processus de se terminer proprement SIGCHLD indique au processus p re qu un de ses fils vient de se terminer A ignorer dans un processus p re qui pourrait se finir avant ses fils Sinon les processus fils peuvent devenir zombie SIGWINCH indique que la fen tre dans lequel tourne un programme a chang de taille SIGUSRI signal utilisateur 1 SIGUSR2 signal utilisateur 2 Il n est pas possible de d router le programme vers une fonction de traitement sur r ception du signal SIGKILL celui ci provoque toujours la fin du processus Ceci permet l administrateur syst me de supprimer n importe quel processus chaque signal est associ un num ro Les correspondances entre num ro et nom des signaux se trouvent g n ralement dans le fichier usr include signal h ou dans le fichier usr include sys signal h suivant le syst me 7 6 Envoi d un signal La fonction int kill int pid int signum permet d envoyer un signal un processus Exemple ki11 1664 SIGHUP 23 Ici on en
6. s_c Fin processus fils exit FIG 2 Canevas du serveur parall le utilisant TCP l entier correspondant Une fois r f renc dans la table des fichiers le fichier est dit ouvert En cas d erreur par exemple lorsque le fichier d sign n existe pas open retourne 1 Le param tre path est une cha ne de caract res donnant le chemin d acc s du fichier Le param tre flags d termine de quelle fa on le fichier va tre ouvert c est dire quels types d op rations vont tre appliqu es ce fichier O_RDONLY pour un fichier ouvert en lecture seule O_WRONLY pour un fichier ouvert en criture seule O_RDWR pour un fichier ouvert en lecture criture O_APPEND si le fichier existe les donn es qui seront ajout es seront plac es la fin du fichier et n craseront pas les donn es existantes e O_CREAT cr e le fichier s il n existe pas La valeur de flags peut aussi tre une combinaison des valeurs ci dessus par la fonction ou bit bit Par exemple O RDONLY O_WRONLY qui doit tre sensiblement quivalent O_RDWR Le param tre mode n est utilis que si le drapeau O CREAT est pr sent Dans ce cas l mode indique les permissions du fichier cr les 3 chiffres repr sentent les permissions pour de gauche droite l utilisateur le groupe et les autres voir indications donn es par la commande ls l 15 5 1 2 L appel syst me read int read int fd void buf s
7. suivant montre l effet de fork include lt unistd h gt int main int argc char argv int i printf je suis avant le fork n i fork printf je suis apres le fork il a retourne d n i gt Le r sultat de l ex cution est je suis avant le fork je suis apres le fork il a retourne 3214 je suis apres le fork il a retourne 0 Lors de l ex cution l ordre dans lequel le fils et le p re affichent leurs informations n est pas toujours le m me Cela est d l ordonnancement des processus par le syst me d exploitation qui ne s effectue pas toujours dans le m me ordre 7 3 L appel syst me wait Il est souvent tr s pratique de pouvoir attendre la fin de l ex cution des processus fils avant de continuer l ex cution du processus p re afin d viter que celui ci se termine avant ses fils par 21 exemple La fonction int wait int status permet de suspendre l ex cution du p re jusqu ce que l ex cution d un des fils soit termin e La valeur retourn e est le pid du processus qui vient de se terminer ou 1 en cas d erreur Si le pointeur status est diff rent de NULL les donn es retourn es contiennent des informations sur la mani re dont ce processus s est termin comme par exemple la valeur pass e exit Dans l exemple suivant nous compl tons le programme d crit pr c demment en utilisant wait le p re attend alors que le fils soit termin pour afficher les info
8. EN Polytech Grenoble lt R seau eiffel RICM 4 TP de R seaux RICM 4 Documentation d aide la programmation en langage C Pascal Sicard 30 novembre 2011 Table des mati res 1 Organisation du code source 3 2 Compilation 4 2 1 Utilisation de biblioth ques standard 4 3 Aide la compilation le Makefile 5 4 Les sockets 4 1 La fonction socket 0 0 0 0 0 000002002004 42 Lafonctiongethostbyname 2 22 ja seu boues L ubeemess 4 3 La fonction getservbyname 0 0 0 0 002020 4 4 La fonction inet ntoa Obsol te remplac e par inet ntop 4 5 Lafonctioninet_nt0p 4 4 4 Len Lan bbe R TE Se 46 La fonction inet pton LA RU A I RUE Ne ENT Tee 47 La fonction gethostbyaddr 34 4h ha d he Du aux 8 8 4 8 Conversion Little endian Big endian 4 9 La structure sockaddr o D N N N JD 4 10 La fonction getsockname 44 sis dis she ans hha meute 4 11 La fonction getpeername 0004 10 4 12 Les options des sockets 4 o oo aa a due da R pe Rs 10 4 13 4 14 4 15 4 16 4 17 4 18 4 19 4 20 4 21 La fonction connect i ancra ARR LS RE L aT D r S La fonction cC LOS X LS aila sf EMA El ET EE D Nar sx L fonction bind 2 ss Les dan Lee ER ee Dr V TE da 24 e A La fonction Listen as 18 nE eue eee SN A MR ee M da Ca fonction accept Lie Lator eise T Les fon
9. aille TailleBloc caract res Les caract res sont copi s dans le buffer qui doit tre pr alablement allou La valeur retourn e est le nombre de bloc effectivement lu Si la valeur retourn e est O soit la fin du fichier a t rencontr e soit une erreur est survenue On utilisera une taille de bloc 1 pour une lecture de caract res 17 6 5 La fonction int fwrite char xbuffer int TailleBloc int NbBloc FILE xstream fwrite fonctionne de la m me mani re que fread mais en criture La valeur retourn e est gale au nombre de blocs effectivement crits Si elle est diff rent de NbBloc il y a eu une erreur 6 6 La fonction int feof FILE stream Cette fonction retourne 0 si le fichier d crit par stream contient encore des donn es lire une valeur diff rente de 0 sinon 6 7 La fonction int ferror FILE stream Cette fonction retourne une valeur diff rente de 0 si une erreur est survenue lors de la derni re op ration sur le fichier stream Exemple if ferror f 0 printf erreur en criture sur le fichier n exit EXIT_FAILURE 6 8 La fonction int fprintf FILE xstream const char xformat lt Elle crit dans le fichier d crit par stream les donn es sp cifi s par les param tres sui vants La cha ne de caract re format peut contenir des donn es crire ainsi que la sp cification d un format d criture appliquer 44 entier c caract re s cha ne de caract
10. ame nom de l option e int setsockopt int s int level int optname const void optval socklen t optlen permet de mettre jour les options d une socket Quelques options int ressantes voir le man Pour TCP et UDP o SO REUSEADDR enable disable local address reuse o SO_OOBINLINE enable disable reception of out of band data in band o SO _SNDBUF set buffer size for output o SO_RCVBUF set buffer size for input Exemple int optval 5000 setsockopt sock SOL_ SOCKET SO_SNDBUF char x amp optval sizeof int Possibilit de g rer avec ces options des sockets multicast voir le man et les sources de socklab 4 13 La fonction connect int connect int sock struct sockaddr_in paddr int 1g_struct Cette fonction prend en argument 1 le descripteur de fichier d une socket pr alablement cr e 2 un pointeur vers une structure de type sockaddr_in qui comporte le port et l adresse de la socket distante 3 la taille de cette structure Elle retourne 1 si la connexion n est pas possible 0 sinon 4 14 La fonction close int close int sock La socket se ferme simplement au moyen de la fonction close On peut aussi utiliser la fonction shutdown qui permet une fermeture s lective de la socket soit en lecture soit en criture 10 4 15 La fonction bind int bind int sock struct sockaddr_in paddr int 1g_struct Cette fonction prend en argument 1 le descripteur de fichier de la socket pr ala
11. avoir diff rentes conventions de stockages en m moire des entiers courts 16 bits et des entiers longs 32 bits e big endian tels que les Motorola octet de poids fort l adresse la plus petite e little endian tels que les Intel octet de poids faible l adresse la plus petite Pour les communications IP le format big endian a t retenu Il faut donc ventuellement convertir le num ro de port du format natif de la machine vers le format r seau au moyen de la fonction htons host to network short pour les machines processeur little endian Pour rendre les programmes portables sur des machines de diff rent type on utilise cette fonction sur tous les types de machines elle est galement d finie sur les machines base de processeur big endian mais elle ne fait rien L adresse IP n a pas besoin d tre convertie lorsqu elle est issue des primitives gethostbyname et inet_aton unsigned short htons unsigned short port unsigned long htonl unsigned long adresse Idem pour la conversion dans l autre sens avec ntohs et ntohl r seau vers machine 4 9 La structure sockaddr Dans le cas des communications IP le pointeur vers la structure de type sockaddr est en fait un pointeur vers une structure de type sockaddr_in d finie dans le fichier d en t te lt netinet in h gt d o la conversion de pointeur Cette structure contient trois champ utiles e short sin family est la famille de protocoles utilis
12. blement cr e 2 un pointeur vers une structure de type sockaddr_in port et adresse locaux 3 la taille de cette structure 4 16 La fonction listen int listen int sock int nb_ connexion Elle permet d informer le syst me d exploitation de la pr sence du nouveau serveur Cette fonction prend en argument 1 le descripteur de fichier d une socket pr alablement cr e 2 le nombre maximum de connexions pouvant tre en attente on utilise g n ralement la constante SOMAXCONN qui repr sente le nombre maximum de connexions en attente au toris par le syst me d exploitation 4 17 La fonction accept int accept int sock struct sockaddr in xpaddr int lg Elle permet d attendre qu un client se connecte au serveur Cette fonction prend trois arguments 1 le num ro de descripteur de la socket 2 un pointeur vers une structure de type sockaddr structure qui sera remplie avec les param tres du client qui s est connect 3 un pointeur vers un entier qui sera rempli avec la taille de la structure ci dessus En cas de succ s de la connexion la fonction accept renvoie un nouveau descripteur de fichier repr sentant la connexion avec le client Le descripteur initial peut encore servir de nouveaux clients pour se connecter au serveur c est pourquoi les serveurs appellent ensuite g n ralement la fonction fork afin de cr er un nouveau processus charg du dialogue avec le client tandis que
13. chier a t atteinte ou si une erreur est survenue Exemple char buf 255 fgets buf 255 f 6 11 La fonction int getc FILE stream Cette fonction lit un caract re depuis le fichier stream et le retourne sous forme d entier int getchar fait la m me chose avec l entr e standard clavier stdin 6 12 La fonction int putc int c FILE stream Cette fonction crit le caract re c dans le fichier stream int putchar int c fait la m me chose avec stdout 19 6 13 La fonction int fclose FILE stream Cette fonction indique au syst me que le fichier stream ne sera plus utilis et que les ressources associ es peuvent tre lib r es La fonction retourne EOF en cas d erreur ou 0 sinon 6 14 Les fonctions int sprintf char str const char format et int sscanf const char str const char format D Elles fonctionnent de la m me mani re que les fonctions fprintf et fscanf mais prennent ou stockent leurs donn es dans une cha ne de caract res et non dans un fichier 7 Les Processus Les ordinateurs dot s de syst mes d exploitation modernes peuvent ex cuter en m me temps plusieurs programmes pour plusieurs utilisateurs diff rents ces machines sont dites multi t ches et multi utilisateurs Un processus ou process en anglais est un ensemble d instructions se d roulant s quentiellement sur le processeur par exemple un de vos programmes en C le shell qui interpr te les comma
14. constantes Exemple define TRUC nimportequoi Attention c est ensuite un copie coll des cha nes de caract res qui est effectu par le compilateur dans la suite du fichier Listes de variables globales au fichier source Listes de proc dure fonctions avec variables locales Une proc dure main particuli re programme principal Fichiers h associ s un fichier de m me nom suffix c Permet d inclure les d clarations de proc dure fonctions et constantes utilis s 3 2 dans un fichier c pour faire de la compilation s par e Une inclusion est quivalent une recopie tel quel du fichier h au moment de la compilation Possibilit aussi de d finitions de constantes 3 Exemple proci h d finition d une constante define CLIENT 3 entete de la procedure proci void proci int a proci c include proci h ici proci h doit tre dans le m me r pertoire void proci int a xcorps de la proc dure 1 utilisation de constante proc2 c include proc1 h void proc2 int b corps de la procedure utilisation de proci et constante Compilation e Un seul fichier c gcc fichier c o fichierexecutable e Plusieurs fichiers c gcc c fichieri c g n ration du code interm diaire dans fichier1 0 Puis gcc fichieri o fichier2 0o o fichierexecutable dition de lien entre les fichiers objets 2 1 Utilisation de biblioth ques standard Inclusion dans
15. ctions read etWrite Les fonctions sendto et recvfrom La fonction selecto ils nta Se le Dg e Dr da I US ai Canevas des algorithmes standards Les descripteurs de fichiers 9 1 Les primitives associ s aux descripteurs de fichier 51 1 D appel syst me open 0 0020020 0 5 1 2 D appel syst me read 0 0020000 00 51 3 D appel syst me write aoaaa aa hrs 24 514 D appel syst me close oaa a a a 5 1 5 Les descripteurs de fichier particuliers Les fonctions d entr es sorties de la biblioth que standard 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6 10 6 11 Les descripteurs de fichier particuliers La fonction FILE fopen char xpath char xmode La fonction int fclose FILE stream La fonction int fread char buffer int TailleBloc int NbBloc FILE stream A 22 Va 1 4 mis aati f ut aan a ti nur Ga Nh Naa et dus La fonction int fwrite char xbuffer int TailleBloc int NbBloc FILE Stream Se diuhen u LAZ M M Re ARR AY DER La fonction int feof FILE stream La fonction int ferror FILE stream La fonction int fprintf FILE stream const char format La fonction int fscanf FILE stream const char xformat La fonction char fgets char xstr int size FILE stream La
16. ddr serveur ici pas besoin de htonl p_info_service getservbyname service protocole if p_info_service Service reference dans etc service p_adr_serv gt sin_port htons ntohs p_info_service gt s_port DEFPORTBASE else Service repere par un entier sous forme de chaine de car il faut en deduire le numero de port 4 p_adr_serv gt sin_ port htons u_short atoi service 4 10 La fonction getsockname int getsockname int socket struct sockaddr in name int namelen Cette proc dure permet de r cup rer l adresse et le port dans la structure sockaddr_in locaux de la socket donn e en param tre utile en cas d allocation dynamique du num ro de port ATTENTION le param tre namelen est un param tre donn e r sultat La fonction retourne 1 en cas d chec de la recherche 4 11 La fonction getpeername int getpeername int socket struct sockaddr_in name int namelen Cette proc dure permet de r cup rer l adresse et le port dans la structure sockaddr_in du processus distant connect la socket donn e en param tre La fonction retourne 1 en cas d chec de la recherche 4 12 Les options des sockets e int getsockopt int s int level int optname void optval socklen_t xoptlen permet de r cup rer les valeurs des options o s descripteur de socket o level num ro de protocole renvoy par la fonction getprotobyname o optn
17. de fichier particuliers Les descripteurs de fichiers 0 1 et 2 sont sp ciaux ils repr sentent respectivement l entr e standard la sortie standard et la sortie d erreur Si le programme est lanc depuis un terminal de commande sans redirection 0 est associ au clavier 1 et 2 l cran 6 Les fonctions d entr es sorties de la biblioth que standard Les fonctions d entr es sorties de la biblioth que standard stdio h ont les caract ristiques suivantes e Les acc s aux fichiers sont asynchrones et bufferis s Cela signifie que les lectures ou les critures de donn es dans un fichier n ont pas lieu au moment o elles sont demand es mais qu elles sont d clench es ult rieurement En fait les fonctions de la biblioth que standard 16 utilisent des zones de m moire tampon des buffers en anglais pour viter de faire trop souvent appel au syst me et elles vident ces tampons soit lorsque cela leur est demand explicitement soit lorsqu ils sont pleins e Les acc s aux fichiers sont format s ce qui signifie que les donn es lues ou crites sont interpr t es conform ment un type de donn es int char etc Ces fonctions sont particuli rement indiqu es pour traiter un flot de donn es de type texte 6 1 Les descripteurs de fichier particuliers Trois descripteurs de fichiers particuliers sont pr d finis e stdin qui correspond au descripteur de fichier entier 0 c est dire l
18. e nom du service char s_aliases x liste des alias int s_port num ro de port char s_proto protocole utilis 4 4 La fonction inet_ntoa Obsol te remplac e par inet_ntop char inet ntoa struct in_addr in inet_ntoa convertit l adresse Internet de l h te donne dans l ordre des octets du r seau en une cha ne de caract res dans la notation d cimale point e 4 5 La fonction inet ntop const char inet ntop int af const void src char dst socklen_t size Permet de convertir une adresse IP issue de la structure sockadr_in en chaine de caract re sous forme d cimal point Exemple char str INET ADDRSTRLEN inet ntop AF_INET amp adr_serv sin addr str INET_ADDRSTRLEN 4 6 La fonction inet pton int inet_pton int af const char src void dst Permet de remplir la structure sockadr_in par une adresse donn e en d cimal point cha ne de caract re Exemple struct sockaddr_in adr_serv inet pton AF_INET 192 0 0 1 adr_serv sin_addr 4 7 La fonction gethostbyaddr struct hostent gethostbyaddr void addr int tailleaddr int protocole Elle retourne un pointeur sur la structure hostent partir de l adresse sous forme d entier long retourn par inet_addr par exemple 4 8 Conversion Little endian Big endian Les ports et les adresses IP doivent tre fourni sous un format unique En effet les micropro cesseurs peuvent
19. e fgets buf sizeof buf stdin fputs buf pp pclose pp La fonction pclose permet de fermer le pipe avec en argument le pointeur de fichier rendu initialement par popen 26
20. entr e standard e stdout qui correspond au descripteur de fichier entier 1 c est dire la sortie standard e stderr qui correspond au descripteur de fichier entier 2 c est dire la sortie d erreur standard Les fonctions scanf et printf travaillent respectivement sur stdin et stdout 6 2 La fonction FILE fopen char xpath char xmode Elle ouvre le fichier indiqu par la cha ne de caract res path et retourne soit un pointeur sur une structure de type FILE d crivant le fichier soit la valeur symbolique NULL si une erreur est survenue La chaine mode indique le type d ouverture r pour read ouvre le fichier en lecture seule r ouvre le fichier en lecture criture w pour write cr e le fichier s il n existe pas ou le tronque 0 et l ouvre en criture w comme w mais ouvre le fichier en lecture criture a pour append cr e le fichier s il n existe pas et l ouvre en criture en positionnant le descripteur la fin du fichier e a comme a mais ouvre le fichier en lecture criture Exemple f fopen tmp test w 6 3 La fonction int fclose FILE xstream Elle permet de fermer un fichier pr alablement ouvert l aide de fopen Elle retourne 0 si la fermeture s est bien pass e 6 4 La fonction int fread char xbuffer int TailleBloc int NbBloc FILE xstream fread permet de lire dans un fichier NbBloc de t
21. f EXEC core On peut aussi faire make serveur pour ne compiler que le serveur On peut lancer un makefile de nom diff rent par make f nomMakediff rent ATTENTION il faut utiliser des tabulations en d but de ligne et non des espaces 4 Les sockets 4 1 La fonction socket int socket int domaine int mode int protocole Elle permet de cr er une socket de type quelconque e Le param tre domaine pr cise la famille de protocoles utiliser pour les communications Il y a deux familles principales o PF_UNIX pour les communications locales n utilisant pas le r seau Communication entre processus sur une m me machine o AF_INET pour les communications r seaux utilisant le protocole IP Nous n tudierons par la suite que la famille AF_INET e Le param tre mode pr cise le type de la socket cr er o SOCK STREAM pour une communication bidirectionnelle s re Dans ce cas la socket utilisera le protocole TCP pour communiquer o SOCK DGRAM pour une communication sous forme de datagrammes Dans ce cas la socket utilise le protocole UDP pour communiquer o SOCK_RAW pour pouvoir cr er soi m me ses propres paquets IP ou les recevoir sans traitement de la part de la couche Transport e Le param tre protocole pr cise le protocole utilis d pend bien s r du champ mode o IPPROTO_UDP o IPPROTO TCP o IPPROTOICMP o IPPROTO RAW La valeur renvoy e par la fonction socket est 1 en cas d erreur sinon c est un descripteu
22. fichier c du fichier h correspondant la biblioth que Exemple include lt socket h gt lt h gt contrairement aux h permet au compilateur de retrouv la biblioth que voir directive de compilation ci dessous Les options de compilation sont variables suivant les syst mes d exploitation Exemple gcc fichier c o executable Isocket o socket est le nom de la biblioth que dynamique fichier libsocket a 3 Aide la compilation le Makefile Cet outil permet par la simple commande make de lancer les compilations des fichiers qui ont t modifi s depuis la derni re compilation Exemple de fichier makefile commentaires d finitions des fichiers objets comme une d finition d une constante en C copie coll dans la suite du fichier OBJ1 0BJ2 fon o serveur o fon o client o EXEC 0BJ1 client 0BJ2 serveur But du makefile cr er ces fichiers all EXEC Pour chacun d eux on donne son nom suivi des fichiers dont il d pend puis la commande de compilation qui le cr era fon o fon h fon c gcc c fon c client o fon h client c gcc c client c serveur o fon h serveur c gcc c serveur c client 0BJ1 gcc 0BJ1 o client lcurses lsocket lnsl ltermcap serveur 0BJ2 gcc 0BJ2 o serveur lcurses lsocket Insl ltermcap permet de d truire tous les fichiers voulu fichiers cr s et core ventuel par la commande make clean clean rm
23. fonction int getc FILE stream 10 10 11 11 11 11 12 12 13 13 14 14 16 16 16 16 17 17 17 17 18 18 18 18 19 19 19 6 12 La fonction int putc int c FILE stream 19 6 13 La fonction int close FILE stream 20 6 14 Les fonctions int sprintf char str const char format et int sscanf const char str const char xformat 20 Les Processus 20 7 1 Les fonctions d identification des processus 20 7 2 La cr ation de processus 0 0 0 0 0 0 0 21 7 3 D appel syst me wait oaoa a a a 21 T Wes SIENNE 8D 28 E a a a e E A 44 22 7 5 Liste et signification des diff rents signaux 23 7 6 Envoidunsignal 0 0 0 0 0000000 0 00 08 0 23 7 7 R ception un signal 3 2 8 du us MS mat Da Lt Dates As 2 24 Autres primitives pouvant servir 25 81 Lafonctionsystem Q SA M Nes he and ans eat 25 8 2 Lafonctionpopen sis his LU NE US MANS a 25 Organisation du code source 1 Le manuel en ligne La commande man permet de r cup rer des informations sur les commandes les fonctions des biblioth ques C Exemple man man donne le mode d emploi de la commande man L option k permet de chercher dans le manuel par mots cl s Exemple man k stream 2 Les fichiers sources e Fichiers c sources en C O O e e O Listes d inclusions de fichiers h Listes de
24. ique et qui peut s utiliser avec tout type de descripteurs de fichier socket tuyaux entr e standard Elle peut tre utilis pour m langer des sockets et des entr es sorties standard Exemple main fd_set set setbis int idsocki idsock2 maxsock FD_ZERO amp set maxsock getdtablesize FD_SET idsocki amp set ajout de idsocki FD_SET idsock2 amp set ajout de idsock2 l ensemble set l ensemble set w pr bcopy char x amp set char amp setbis sizeof set copie de l ensemble set dans setbis FORCES un me select maxsock amp set 0 0 O if FD_ISSET idsock1 amp set Test si idsocki appartient l ensemble set if FD_ISSET idsock2 amp set bcopy char x amp setbis char x amp set sizeof set 12 On commence par indiquer au moyen d une variable de type fd_set quels descripteurs nous int ressent La fonction FD_ZERO met la variable set z ro puis on indique son int r t dans l coute des sockets gr ce la fonction FD_SET On appelle ensuite la fonction select qui attendra que des donn es soient disponibles sur l un de ces descripteurs La fonction select prend cinq arguments 1 Le plus grand num ro de descripteur surveiller plus un Dans notre exemple c est maxsock mais cela pourrait etre max idsocketi idsocket2 1 2 Un pointeur vers une variable de type fd_set repr senta
25. ize_t nbytes Le param tre fd indique le descripteur de fichier concern c est dire le fichier dans lequels les donn es vont tre lues Le param tre buf d signe une zone m moire dans laquelle les donn es lues vont tre stock es Cette zone m moire doit tre pr alable allou e Le param tre nbytes indique le nombre d octets et non le nombre de donn es que l appel read va essayer de lire il se peut qu il y ait moins de donn es que le nombre sp cifi par nbytes Le type size_t est en fait quivalent un type int et a t d fini dans un fichier d en t te par un appel typedef La valeur retourn e par read est le nombre d octets effectivement lus la fin du fichier c est dire quand il n y a plus de donn es disponibles 0 est retourn En cas d erreur 1 est retourn 5 1 3 L appel syst me write int write int fd void xbuf size_t nbytes Il s utilise de la m me fa on que l appel syst me read La valeur retourn e est le nombre d octets effectivement crits En cas d erreur 1 est retourn 5 1 4 L appel syst me close int close int fd Cet appel permet de fermer un fichier pr c demment ouvert par l appel syst me open En cas d oubli le syst me d truira de toute fa on en fin de programme les ressources allou es pour ce fichier Il est n anmoins pr f rable de fermer explicitement les fichiers qui ne sont plus utilis s 5 1 5 Les descripteurs
26. le processus initial continue attendre des connexions Apr s un fork chaque processus ferme le descripteur qui lui est inutile 4 18 Les fonctions read et write int read int sock char buffer int nb a lire int write int sock char xbuffer int nb a ecrire Elles sont utilis es en mode TCP ou inter processus 11 read retourne le nombre d octets effectivement lus write retourne le nombre d octets effecti vement crits En cas d erreur elles retournent la valeur 1 En cas de fermeture de la socket par l autre entit r ception du flag fin au niveau TCP read retourne la valeur 0 4 19 Les fonctions sendto et recvfrom int sendto int sock char buffer int nb a ecrire int flags struct sockaddr in p_adr distant int taille _struct int recvfrom int sock char buffer int nb a lire int flags struct sockaddr in p_adr distant int taille _struct Elles sont utilis es en mode UDP ou RAW sendto retourne le nombre d octets effectivement crits rcvfrom retourne le nombre d octets effectivement crits p adr distant est un pointeur vers la structure qui comporte le port et l adresse distants 4 20 La fonction select int select int maxfdpl fd_ set xreadfds fd set xwritefds fd_set exceptfds struct timeval timeout Pour pouvoir couter deux descripteurs la fois et lire les donn es sur un descripteur quand elles sont disponibles on utilise la fonction select qui est extr mement prat
27. ls La commande system n accepte qu une seule cha ne de caract res en argument et ne permet donc pas d introduire plusieurs arguments dynamiques comme le fait la fonction printf Si tel est le cas il faut alors la coupler avec la fonction sprintf O Cette derni re permettra de construire la convenance du programmeur la cha ne finale qui sera utilis e par la fonction systen 8 2 La fonction popen FILE popen char commande char mode e FILE indique que la fonction popen retourne un pointeur sur une structure de type FILE comme le fait la fonction fopen e commande repr sente la cha ne de caract res associ e au nom de la commande Unix ventuellement suivie de ses arguments exactement comme pour la fonction system e mode correspond au mode d entr e sortie choisi r lecture o w ecriture popen ouvre un pipe fichier temporaire avant d appeler la commande permettant ainsi au programme appelant de communiquer avec le programme appel gr ce ce pipe O Exemple de lecture de donn es d une commande restitu es sur l cran FILE pp if pp popen ps aux r NULL perror popen exit 1 while fgets buf sizeof buf pp fputs buf stdout 25 pclose pp Exemple d criture de donn es vers une commande partir d une saisie clavier FILE xpp if pp popen usr ucb mail w NULL perror popen exit 1 F whil
28. ndes entr es au clavier ou le programme X qui g re l cran de votre machine Sous Unix la commande ps permet de voir la liste des processus existant sur une ma chine ps xu donne la liste des processus que vous avez lanc sur la machine avec un certain nombre d informations sur ces processus En particulier la premi re colonne donne le nom de l utilisateur ayant lanc le processus et la derni re le contenu du tableau argv du processus ps aux donne la liste de tout les processus lanc s sur la machine Chaque processus sa cr ation se voit attribuer un num ro d identification le pid C est ce num ro qui est utilis ensuite pour d signer un processus Ce num ro se trouve dans la deuxi me colonne de la sortie de la commande ps aru Un processus ne peut tre cr qu partir d un autre processus sauf le premier init qui est cr par le syst me au d marrage de la machine Chaque processus a donc un ou plusieurs fils et un p re ce qui cr e une structure arborescente noter que certains syst mes d exploitation peuvent utiliser des processus pour leur gestion interne dans ce cas le pid du processus init le premier processus en mode utilisateur sera sup rieur 1 7 1 Les fonctions d identification des processus Ces fonctions sont au nombre de deux e pidt getpid void Cette fonction retourne le pid du processus e pidt getppid void Cette fonction retourne le pid du processus p re Si le p
29. nt la liste des descripteurs sur lesquels on veut lire Au retour de select cette liste contient les descripteurs pr ts 3 Un pointeur vers une variable de type fd_set repr sentant la liste des descripteurs sur lesquels on veut crire N tant pas int ress s par cette possibilit nous avons utilis un pointeur nul 4 Un pointeur vers une variable de type fd_set repr sentant la liste des descripteurs sur lesquels peuvent arriver des conditions exceptionnelles N tant pas int ress s par cette possibilit nous avons utilis un pointeur nul 5 Un pointeur vers une structure de type timeval repr sentant une dur e apr s laquelle la fonction select doit rendre la main si aucun descripteur n est disponible Dans ce cas la valeur retourn e par select est 0 N tant pas int ress s par cette possibilit nous avons utilis un pointeur nul La fonction select renvoie 1 en cas d erreur 0 au bout du temps sp cifi par le cinqui me param tre et le nombre de descripteurs pr ts sinon L ensemble des descripteurs contient apr s l appel select les descripteurs pr ts tre lus La fonction FD_ISSET permet de d terminer si un descripteur est dans un ensemble 4 21 Canevas des algorithmes standards La figure 1 donne le canevas de l algorithme du client utilisant le protocole TCP La figure 2 donne le canevas de l algorithme du serveur utilisant le protocole TCP et traitant plusieurs clients en parall le
30. oie EINTR au processus appelant Il faut alors relancer cet appel syst me Il est possible de demander au syst me de red marrer automatiquement certains appels syst me interrompus par un signal La constante SA RESTART est utilis e cet effet e sa mask indique la liste des signaux devant tre bloqu s pendant l ex cution de la fonction de traitement du signal On ne veut g n ralement bloquer aucun signal c est pourquoi on initialise sa mask z ro au moyen de la fonction sigemptyset 24 3 Un pointeur sur une structure de type sigaction structure qui sera remplie par la fonction selon l ancienne configuration de traitement du signal Ceci ne nous int resse pas ici d o l utilisation d un pointeur nul La valeur renvoy e par sigaction est e si tout s est bien pass e 1 si une erreur est survenue Dans ce cas l appel sigaction est ignor par le syst me Ainsi dans notre exemple chaque r ception du signal SIGUSRI1 le programme sera d rout vers la fonction TraiteSignal puis reprendra son ex cution comme si de rien n tait En particulier les appels syst me qui auraient t interrompus par le signal seront relanc s auto matiquement par le syst me 8 Autres primitives pouvant servir 8 1 La fonction system int system char x commande Elle permet d appeler une commande UNIX depuis un pro gramme C Le r sultat de la commande est affich e l cran Exemple system
31. r de fichier qu on peut par la suite utiliser avec les autres fonctions de la librairie des Sockets 4 2 La fonction gethostbyname struct hostent gethostbyname char x nom Elle permet d interroger le DNS de fa on obtenir l adresse IP d une machine partir de son nom Cette fonction prend en argument une cha ne de caract res pointeur de type char contenant le nom de la machine et renvoie un pointeur vers une structure de type hostent d fini dans le fichier d en t te lt netdb h gt Cette structure contient trois champs qui nous int ressent e hname est le nom canonique de la machine pointeur de type char e haddr list est la liste des adresse IP de la machine pointeur de type char Peut aussi tre vu dans le cas d une seule adresse par le champ h_addr char e hlength est la taille de chacune des adresses stock es dans h_addr list ceci sert en permettre la recopie sans faire de suppositions sur la taille des adresses 4 3 La fonction getservbyname struct servent getservbyname char x nom char xprotocole Un nom peut tre associ un num ro de port Sous Unix ces associations se trouvent dans le fichier etc services Le protocole utilis TCP UDP apparait aussi dans ce fichier Le fonction getservbyname permet de r cup rer un num ro de port partir de son nom et du protocole utilis Elle retourne un pointeur vers une structure de type servent struct servent char s_nam
32. res f flottant Cette fonction s utilise de la m me mani re que la fonction printf La valeur retourn e est le nombre de caract res crits Exemple fprintf f la valeur de i est d la valeur de c est c n i car 18 6 9 La fonction int fscanf FILE stream const char format gt Cette fonction lit le fichier d crit par stream selon le format sp cifi par la cha ne format et stocke les valeurs correspondantes aux adresses sp cifi es par les param tres suivants Attention les adresse sp cifi es doivent tre valides c est dire qu elles doivent correspondre des zones m moires pr alablement allou es La valeur retourn e est soit le nombre de conversions effectu es soit la valeur symbolique EOF si aucune conversion n a eu lieu Exemple fscanf f d 4d amp i amp j un blanc doit s par les entiers dans le fichier 6 10 Lafonction char fgets char str int size FILE stream Cette fonction lit des caract res depuis le fichier stream et les stocke dans la cha ne de caract res str La lecture s arr te soit apr s size caract res soit lorsqu un caract re de fin de ligne est rencontr soit lorsque la fin du fichier est atteinte La fonction fgets retourne soit le pointeur sur str soit NULL si la fin du fichier est atteinte ou si une erreur est survenue Comme pour fscanf les fonctions ifeof et ferror peuvent tre utilis es pour savoir si la fin du fi
33. rmations sur le fork et ainsi s affranchir de l ordonnancement al atoire des t ches int main int argc char argv int i j printf je suis avant le fork n i fork if i 0 i O seulement pour le pere j wait NULL printf wait a retourne d n j printf je suis apres le fork il a retourne d n i L ex cution donne je suis avant le fork je suis apres le fork il a retourne 0 wait a retourne 473 je suis apres le fork il a retourne 473 Notons que cette fois ci l ordre dans lequel les informations s affichent est toujours le m me 7 4 Les signaux Les signaux constituent la forme la plus simple de communication entre processus Un signal est une information atomique envoy e un processus ou un groupe de processus par le syst me d exploitation ou par un autre processus Lorsqu un processus re oit un signal le syst me d exploitation l informe tu as re u tel signal sans plus Un signal ne transporte donc aucune autre information utile Au niveau du microprocesseur un signal correspond une interruption logicielle Lorsqu il re oit un signal un processus peut r agir de trois fa ons e Il est imm diatement d rout vers une fonction sp cifique qui r agit au signal en modifiant la valeur de certaines variables ou en effectuant certaines actions par exemple Une fois cette fonction termin e on reprend le cours normal de l ex cution du programme
34. roces sus p re n existe plus parce qu il s est termin avant le processus fils par exemple 20 la valeur retourn e est celle qui correspond au processus init en g n ral 1 anc tre de tous les autres et qui ne se termine jamais 7 2 La cr ation de processus La biblioth que C propose plusieurs fonctions pour cr er des processus avec des interfaces plus ou moins perfectionn es Cependant toutes ces fonctions utilisent l appel syst me fork qui est la seule et unique fa on de demander au syst me d exploitation de cr er un nouveau processus pidt fork void Cette fonction est un appel syst me qui cr e un nouveau processus La valeur retourn e est le pid du fils pour le processus p re et pour le processus fils La valeur 1 est retourn e en cas d erreur fork se contente de dupliquer un processus en m moire c est dire que la zone m moire du processus p re est recopi e dans la zone m moire du processus fils On ob tient alors deux processus identiques d roulant le m me code en concurrence Ces deux processus ont les m mes descripteurs de fichiers de socket et tuyaux Seule la valeur retourn e par le fork est diff rente suivant dans quel processus on se trouve La valeur retourn e par fork est donc utilis e pour d terminer si on est le processus p re ou le processus fils et permet d agir en cons quence Attention les variables ne sont par contre pas partag es L exemple
35. voie le signal SIGHUP au processus num ro 1664 7 7 R ception d un signal L interface actuelle de programmation des signaux qui respecte la norme POSIX 1 repose sur la fonction sigaction L ancienne interface qui utilisait la fonction signal est proscrire pour des raisons de portabilit La fonction sigaction int sigaction int sig const struct sigaction act struct sigaction oact Exemple void TraiteSignal int sig int main int argc char argv struct sigaction act act sa_handler TraiteSignal sigemptyset amp act sa_mask act sa_flags SA_RESTART if sigaction SIGUSR1 act NULL 1 perror sigaction exit EXIT_FAILURE void TraiteSignal int sig printf R ception du signal num ro d n sig J La fonction sigaction indique au syst me comment r agir sur r ception d un signal Elle prend comme param tres 1 Le num ro du signal auquel on souhaite r agir 2 Un pointeur sur une structure de type sigaction Dans cette structure trois champs nous int ressent e sa _handler qui peut tre o un pointeur vers la fonction de traitement du signal o SIG IGN pour ignorer le signal o SIG_DFL pour restaurer la r action par d faut e sa_flags qui indique des options li es la gestion du signal tant donn l architec ture du noyau UNIX un appel syst me interrompu par un signal est toujours avort et renv
Download Pdf Manuals
Related Search
Related Contents
Installation and user manuals Maft Pro Manual v1.5 (~v5.0 Firmware) TWS 800A/AZ - MHz Electronics, Inc 07_ha.5 Copyright © All rights reserved.
Failed to retrieve file