IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Différence entre s_ififo et s_ifsock


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Par défaut Différence entre s_ififo et s_ifsock
    Bonjour,

    Je cherche à savoir quelle est la différence entre les tubes nommés (s_ififo) et fichiers socket (s_ifsock) et dans quel cas utiliser doit-on utiliser l'un ou l'autre.

    Vous savez vous ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 853
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 853
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Joyus Voir le message
    Vous savez vous ?
    Ouais, nous on sait !!!

    Citation Envoyé par Joyus Voir le message
    Je cherche à savoir quelle est la différence entre les tubes nommés (s_ififo) et fichiers socket (s_ifsock)
    Un fichier de type pipe (fifo) est un fichier de communication synchrone entre deux processus situés sur la même machine. Ses caractéristiques font que la première info entrée sera la première à en sortir. De plus, si les deux processus ne sont pas présent en même temps, le noyau bloquera l'ensemble jusqu'à ce que tout soit prêt. C'est pratique quand on veut protéger une ressource unique (comme une imprimante). Toute impression passe par un tube qui est lu par un processus lpd et qui est envoyé sur l'imprimante. Et un second processus lpr sert à prendre le fichier à imprimer et à l'envoyer sur le tube. Et si deux utilisateurs appellent lpr en même temps, comme le noyau bloque l'accès au tube, les deux impressions ne se mélangeront pas dans l'imprimante.
    Exemple simple pour tester ce phénomène
    1) on ouvre un terminal dans lequel on tape
    mknod toto p
    date >toto => là le curseur se bloque => normal, on écrit dnas le tube et personne ne va le lire

    2) on ouvre un second terminal dans lequel on tape
    cat toto => on récupère la date envoyée par le premier terminal et celui-ci est débloqué


    Un fichier socket est un fichier de communication synchrone entre deux processus situés sur la même machine mais les outils permettant de communiquer via ce fichier sont les mêmes que ceux qui permettent de communiquer via la pile TCP/IP. La fonction d'écriture dans un socket sera la même que pour envoyer des infos dans le réseau. Seul la phase d'initialisation (socket ou tcp/ip) sera différente. C'est donc assez pratique quand on veut faire une appli qui doit marcher indifféremment que ce soit entre deux machines ou sur la même. Le corps de l'appli ne change pas, seul l'initialisation de l'appli peut bouger. En revanche, pas de blocage. Si on écrit sur la socket et que personne ne lit le flux, soit l'écriture est refusée, soit elle est perdue (je sais plus trop).

    Citation Envoyé par Joyus Voir le message
    et dans quel cas utiliser doit-on utiliser l'un ou l'autre.
    Ca c'est toi qui décide en fonction de tes besoins...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Par défaut
    Ouaow, ca c'est de la réponse, dit !

    Par contre, quand tu dis que les 2 communications ne se mélangent pas avec un s_ififo, tu es sûr de ça ? J'ai codé un exemple qui me donne le contraire.

    SI j'ouvre mon programme "serveur" qui crée un tube en lecture et 2 clients qui ouvrent un tube en écriture, les 2 clients peuvent écrire en même temps et le serveur affiche bien le texte envoyé par les client. Aucun client n'est bloqué en attendant que l'autre est terminé.

    J'ai vu aussi un article sur internet qui préconise d'utiliser une structure d'envoi de données pour faire du multiplexage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct {
      int id; // identifiant de l'appelant
      int taille;
      char buffer[1024];
    }

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo