Unix - Signals and Traps Signals are software interrupts sent to a program to indicate that an important event has occurred. The events can vary from user requests to illegal memory access errors. Some signals, such as the interrupt signal, indicate that a user has asked the program to do something that is not in the usual flow of control. The following are some of the more common signals you might encounter and want to use in your programs: List of Signals: There is an easy way to list down all the signals supported by your system. The actual list of signals varies between Solaris, HP-UX, and Linux. Default Actions: Every signal has a default action associated with it. Some of the possible default actions are: Terminate the process.Ignore the signal.Dump core. Sending Signals: There are several methods of delivering signals to a program or script. When you press the Ctrl+C key a SIGINT is sent to the script and as per defined default action script terminates. $ kill -signal pid $ kill -1 1001 $ kill -9 1001 $ trap '' 2
Programmation Unix Programmation Unix : Signaux, processus et tubesMerci à l'auteur : Daniel Schang UNIX et langage C Rappel: la commande cc -o prog prog.c correspond à la demande de construction d'un binaire exécutable de nom prog à partir du fichier source prog.c. Au vu de la très forte imbrication qui existe entre le langage C et UNIX il est parfois très utile de pouvoir passer à un programme C des paramètres. Quand on appelle le maindu programme C, deux arguments lui sont passés en fait: le premier, baptisé conventionnellement argc signifiant nombre d'arguments (en anglais: argument count) représente le nombre d'arguments de la ligne de commande qui a appelé le programme,le second, baptisé conventionnellement argv signifiant vecteur d'arguments (en anglais: argument vector) est un pointeur sur un tableau de chaînes de caractères qui contiennent les arguments, à raison de 1 par chaîne.L'entête du programme sera donc celle-ci: main (int argc, char *argv[]) {} Les signaux sous UNIX Présentation des signaux !!!
Remote Procedure Call (RPC) L'appel de fonction est un mécanisme très bien connu des programmeurs, d'où l'idée de programmer des applications distribuées en appelant des fonctions qui sont situées sur une machine distante, ce qui explique le nom de « Remote Procedure Call ». Vous pouvez utiliser les RPC pour toutes sortes d'applications distribuées, par exemple l'utilisation d'un ordinateur très puissant pour des calculs intensifs (décryptage de données, calculs numériques ...). Cet ordinateur sera donc le serveur. Un autre ordinateur sera le client et appellera la procédure distante pour commander des calculs au serveur et récupérer le résultat. L'idée de Remote Procedure Call n'est pas nouvelle. Principe de fonctionnement Le système RPC s'efforce de maintenir le plus possible la sémantique habituelle des appels de fonction, autrement dit tout doit être le plus transparent possible pour le programmeur. Interface Cette définition est enregistrée dans le fichier calcul.x. rpcgen -a calcul.x gcc -c calcul_xdr.c $ .
Client et serveur TCP simple - Guillaume's Blog Le protocole TCP est un protocole de la couche transport du modèle OSI. TCP est utilisé dans d'autres protocoles de plus haut niveau comme HTTP, SSH, etc... Il a pour but de garantir une communication la plus fiable possible avec des possibilités de retransmission en cas de perte ou d'erreur. Il est aussi capable de faire de la QoS pour avoir une connexion avec la meilleure qualité possible. En Java, on peut écrire facilement une application client/serveur simple utilisant le protocole TCP en quelques lignes. Pour utiliser le protocole TCP, il faut utiliser les classes ServerSocket et Socket du package java.net. Server, qui jouera le rôle de serveur (étonnant ;-)), en attente de connexion de client,Client, qui sera le client qui va se connecter au serveur. public class Server{ private static String _message = "Hello I'm your server public static void main(String[] args) { try { _port = (args.length == 1) ? System.out.println("TCP server is running on " + _port + "
Programmation TCP en JAVA L'API utilisée pour accéder au protocole TCP se décompose en deux classes, une utilisée par les clients et l'autre par les serveurs. La classe Socket La classe Socket est utilisée par les clients TCP. Pour créer un objet de la classe Socket, il est nécessaire d'utiliser un des constructeurs suivant : public Socket (String machine, int port) throws UnknownHostException, IOException public Socket (InetAddress adresse, int port) throws UnknownHostException, IOException public Socket(String machine, int port, InetAddress local, int portLocal) throws IOExceptionpublic Socket(InetAddress adresse, int port, InetAddress local, int portLocal) throws IOException La création d'un objet Socket entraîne la création d'un point de connexion (la socket) et la connexion vers une autre socket (le serveur). L'adresse locale et le port local peuvent également être spécifiés. Par défaut les primitives de lecture, tel que read(), sont bloquantes tant que rien n'est lisible sur le flux. La classe ServerSocket
Programmation UDP en JAVA Pour utiliser le protocole de transport UDP, il est nécessaire en Java de manipuler deux classes DatagramPacket et DatagramSocket La classe DatagramPacket Cette classe permet de créer des objets qui contiendront les données envoyées ou reçues ainsi que l'adresse de destination ou de provenance du datagramme. Deux constructeurs sont disponibles, un pour les paquets à recevoir, l'autre pour les paquets à envoyer. public DatagramPacket(byte buffer[], int taille) Construit un objet pour recevoir un datagramme. public DatagramPacket(byte buffer[], int taille, InetAddress adresse, int port) Construit un objet pour envoyer un datagramme. Des méthodes sont disponibles pour manipuler de tels objets : public synchronized InetAddress getAddress () Retourne l'adresse stockée dans le paquet. public synchronized int getPort () Retourne le port stocké dans le paquet. public synchronized byte[] getData () Retourne les données stockées dans le paquet. public synchronized int getLength () La classe DatagramSocket