On distingue trois types d'IPC :
- fichier : entre deux processus distincts en mode non-connecté
- pipe, pairsocket : entre un processus père et un processus fils
- socket : entre deux processus distincts. Ce mécanisme prend tout son sens dans une application réseau (Client/Serveur) (...)
[...] Ce mode de communication nécessite le protocole UDP. DATAGRAM : modèle de communication socket bind recvfrom sendto close SERVEUR socket bind (facultatif) sendto recvfrom close CLIENT Réponse Fermeture Envoi d'un message STREAM : caractéristiques Ce mode nécessite l'établissement d'une connexion. Ce mode offre un transfert de données fiable : garantie d'acheminement des données, respect de l'ordre des paquets : reconstitution du message entier avant délivrance, envoi des données urgentes. Une gestion automatique des erreurs de transmission (error-free) est assurée par le mode STREAM. [...]
[...] Processus écrivain Processus lecteur stdin stdout stderr pipe clavier Notion de socket Les pipes et les pairsockets offrent une communication entre un processus père et un processus fils : nécessité d'avoir un ancêtre commun. Deux processus créés séparément (éventuellement sur deux machines différentes : souvent le cas) qui veulent communiquer ensemble doivent utiliser le mécanisme de socket. La notion de socket est introduite par UNIX BSD pour banaliser la communication dans le monde Internet. Fournir un modèle standard de communication entre deux processus quelconques. [...]
[...] L'envoi de données sur une socket non connectée se fait par l'appel : nbcar = sendto(sock, buff, bufflen, flag, to, tolen)); int sock, bufflen, flag, tolen; char *buff; struct sockaddr L'argument to sert à mémoriser l'adresse du destinataire. Cette information est utile pour que le datagramme trouve sa destination. En cas d'échec, ces fonctions renvoient la valeur -1. Primitives annexes à l'utilisation des sockets La programmation des applications réseau nécessite le respect de standards. Les données doivent être converties au format réseau avant leur transmission. La résolution de noms doit passer par l'utilisation de mécanismes communs : DNS, NIS, base d'adresses locale. Passage d'une représentation humaine d'une adresse IP (en décimal) à une représentation machine octets). [...]
[...] L'appel write est construit à partir de l'appel : send(sock, buff, bufflen, flag); int sock, bufflen, flag; flag = 0 dans le cas du write char *buff; L'argument flag permet de configurer la connexion : MSG_OOB : out of band écriture de messages urgents. MSG_DONTROUTE : message à destination d'un réseau local. Erreurs d'écriture : ENOTCONN : socket non connectée EPIPE : socket cassée DATAGRAM : Réception/envoi de message La réception de données sur une socket non connectée se fait par l'appel : nbcar = recvfrom(sock, buff, bufflen, flag, from, fromlen)); int sock, bufflen, flag, fromlen; char *buff; struct sockaddr *from; L'argument from sert à mémoriser l'adresse de l'émetteur. [...]
[...] Structure d'un service IP : struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; } Nom d'un service Numéro de port : struct servent getservbyname (char *name, *proto); Numéro de port Nom d'un service : struct servent getservbyport (port; proto); int port; char *proto; Création d'un processus fils Un serveur multiple doit détacher un processus fils pour répondre à une requête de connexion cliente. Le serveur (processus père) exécute alors l'appel système fork(). Cet appel crée un deuxième processus (fils ou clone) à l'identique du père. La seule différence résulte dans le résultat renvoyé par le fork(). Le fork() renvoit le numéro du processus fils dans le cas du père et la valeur 0 dans le cas du fils. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture