 les échanges interprocessus les échanges interprocessus deux programmes ont besoin de communiquer entre eux pour cela ils peuvent utiliser plusieurs méthodes je ne recence ici que les trois plus utilisées mais il en existe d autres  1 fichiers d échanges un ou deux fichiers servent de boite au lettre pour échanger l information pour éviter les problèmes de concurrence on peut utiliser un seul fichier et employer la technique du verrouillage déverrouillage fichier lock utiliser un fichier en écriture pour chaque programme l autre ne peut que lire le fichier de son partenaire avantages simple à mettre en oeuvre opérations sur des fichiers standards utilisable entre machines distantes ntfs smb http inconvénients lent pas de handshake donc boucles de scrutation difficile à sécuriser droits sur les fichiers  2 les flux internes  par invocation  un programme le père appelle un second programme le fils et établit deux canaux de communication flux entrant sortant le fils utilise ses entrées sorties standards comme fichiers de communication avantages rapidité des échanges sécurité des échange flux privés inconvénients échanges internes uniquement une seule machine voir execve fork assignstream shell cf r2  remarque 1  cette méthode est très utilisé pour écrire des frontend ex apollo ou gqmpeg et mpg123 remarque 2  la commande shell n est qu un simple appel on ne peut pas parler de réelle communication par flux 3 les sockets un programme serveur crée un socket point de communication paramètre ce socket bind et attend listen la connexion d un client le programme client crée un socket puis essaye de le connecter connect au socket du serveur en l absence de serveur il y a échec de connexion le serveur accepte accept la demande de connexion chaque socket est vu comme deux fichiers entrant sortant au travers desquels se font les échanges avantages rapidité des échanges relative sécurité des échange flux privés clients multiples inconvénients complexe à mettre en oeuvre les sockets peuvent fonctionner en mode en interne pflocal ou externe pfinet en mode interne le client identifie le serveur par son nom la connexion reste interne à la machine en mode externe le client identifie le serveur par son adresse ip et par son port de connexion les deux processus peuvent échanger des lignes de texte les lectures écritures se font comme pour des fichiers de texte standards des bolcs de données grace à deux instructions spéciales recv et send voir socket bind listen connect accept exemples pour une fois et au vu de la complexité du sujet j ai décidé de présenter deux exemples en freepascal  etant un langage très didactique et donc lisible les programmeurs n auront aucun mal à le traduire les fonctions principales sont génériques par contre je n aborde pas ici le cas pourtant classique du multiclient car il nécessite l utilisation d une technique de duplication spécifique au sysex hote fork thread  1 communication par flux internes un premier process appelé père invoque un second process indépendant appelé fils tout ce que le fils envoie au père est affiché à l écran par le père les deux process sont tués quand le fils envoie la ligne termine program interprocesspere utilisation de la fonction assignstream uses oldlinux var si so text s string begin writeln pere j appelle le fils assignstream si so filsp if linuxerror 0 then begin writeln assignstream failed halt 1 end readln si s bloc 1 writeln pere le fils dit s writeln pere je parle au fils writeln so salut fils if ioresult 0 then writeln pere peux pas parler au fils readln si s bloc 2 writeln pere le fils dit s while not s termine do begin readln s writeln so s readln si s bloc 3 writeln pere le fils dit s end writeln pere je stoppe la conversation end program interprocessfils var s string begin writeln fils c est le fils bloc 1 s while not s fin do begin readln s if pos salut fils s 0 then writeln salut pere bloc 2 else writeln recu s bloc 3 end writeln termine while not eof input do readln s close output end 2 communication par sockets on crée ici un programme serveur capable d accepter un client ce serveur est en écoute sur le port 6543 il utilise l interface réseau 127001 lo ou la première carte réseau trouvée eth0 program socksvrinetip mode pfinet communication reseau un seul client à la fois programme pour tester l unit sockets version serveur en premier lancer socksvrinetip pour créer le socket puis lancer sockcliinetip qui se connectera au socket le serveur reste en ligne même si le client disparait le serveur ne quitte que si le client envoie fin uses sockets baseunix errors const port 6543 function swapword w word word begin swapword w and ff shl 8 w shr 8 end var buffer string 255 addr tinetsockaddr s longint sin sout text procedure perror const s string begin writeln s strerror socketerror socketerror halt 100 end begin addrfamily afinet addrport swapword port addraddr 0 le serveur ecoute sur toute la plage ip création du socket com reseau mode connecté s va contenir le num indentification du socket s socket afinet sockstream 0 if socketerror 0 then perror serveur erreur socket fourni au socket s les infos de connexion if not bind s addr sizeof addr then perror serveur erreur bind mise en ecoute en mode passif if not listen s 1 then perror serveur erreur listen writeln j attend la connection du client le lancer dans une autre console repeat accepter une connexion d un client if not accept s addr sin sout then perror serveur erreur accept reset sin rewrite sout writeln sout message du serveur flush sout repeat readln sin buffer writeln le server a recu buffer until eof sin or buffer fin until buffer fin closesocket s end la connection à ce serveur peut se faire avec un telnet ipserveur 6543 avec le petit client cidessous en précisant juste l adresse ip du serveur program sockcliinetip mode pfinet communication reseau program pour tester l unit sockets version client en premier lancer socksvrinetip pour créer le socket puis lancer sockcliinetip qui se connectera au socket le serveur reste en ligne même si le client disparait le serveur ne quitte que si le client envoie fin le client peut quitter sans tuer le serveur en tapant quitte uses sockets errors const port 6543 procedure perror const s string begin writeln s strerror socketerror socketerror halt 100 end function swapword w word word begin swapword w and ff shl 8 w shr 8 end function strtoaddr s string longint var r i p c longint t string begin strtoaddr 0 r 0 for i 0 to 3 do begin p pos s if p 0 then p length s 1 if p 1 then exit t copy s 1 p 1 delete s 1 p val t p c if c 0 or p 0 or p 255 then exit r r or p shl i 8 end strtoaddr r end var buffer string 255 addr tinetsockaddr s longint sin sout text i integer msg string begin addrfamily afinet addrport swapword port write entrer adresse ip 127001 pour localhost readln msg addraddr strtoaddr msg création du socket com reseau mode connecté s socket afinet sockstream 0 if socketerror 0 then perror client erreur socket connection au serveur if not connect s addr sin sout then perror client erreur connect reset sin rewrite sout buffer le client est en ligne for i 1 to 10 do writeln sout buffer repeat readln buffer writeln sout buffer flush sout until buffer fin or buffer quitte readln sin buffer writeln buffer close sout closesocket s end dans ce domaine très large qu est la communication par sockets je n ai rien inventé bien sûr et vous trouverez sur le net beaucoup d exemples et de tutoriaux pour en savoir plus voilà quelques bonnes adresses http wwwlinuxfranceorg article manfr man2 index2html http wwwcommentcamarchenet sockets sockcommphp3 http wwwbastisoftde pascal pasinethtml  programmation  