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

C Discussion :

Envoi de signaux


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut Envoi de signaux
    Bonjour,
    je suis sur un programme (petit programme) qui est censé communiqué avec un autre (client/serveur).
    Le client (très basique) transforme des chaine de caractère en valeur binaire ( exemple: 'A' = 65 donne 1000001 si je me trompe pas)
    j'envoie alors via les signaux SIGUSR1 (0) et SIGUSR2 (1) la lettre a mon serveur.
    Mon problème est le suivant :
    Entre chaque SIGUSR1 ou SIGUSR2 que j'envoie (pour un mot de 5 lettres j'envoie 5*7= 35 signaux) il faut mettre un temps de pause, nanosleep(2) dans mon cas,
    est sa me prend quand même beaucoup de temps (7,30 sec pour envoyer une phrase de 100 chars), y a-t-il un moyen d'écourter ce temps?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 395
    Points : 23 756
    Points
    23 756
    Par défaut
    Citation Envoyé par Vodsky Voir le message
    Entre chaque SIGUSR1 ou SIGUSR2 que j'envoie (pour un mot de 5 lettres j'envoie 5*7= 35 signaux) il faut mettre un temps de pause, nanosleep(2) dans mon cas, est sa me prend quand même beaucoup de temps (7,30 sec pour envoyer une phrase de 100 chars), y a-t-il un moyen d'écourter ce temps?
    Bonjour, je suppose que tu travailles sous Linux.

    Tu veux dire que tu te sers de tes signaux pour envoyer bit à bit des caractères d'un processus à un autre ? La vache !

    Contrairement à ce que semblent croire beaucoup de gens, un signal Unix ne sert pas en lui-même à transmettre des données. Les signaux Unix font partie des IPC car ils sont effectivement au nombre restreint des mécanismes qui peuvent affecter un processus depuis un autre, mais ça s'arrête là.

    Un signal Unix sert à faire face à une situation inattendue et à interrompre le processus, comme le ferait une interruption matérielle, par exemple. Elle le préempte et provoque le passage en mode noyau. C'est donc long, et « violent » (interruption du programme à n'importe quel endroit et terminaison du processus dans bon nombre de cas si le signal n'est pas pris en charge par un handler propre).

    Si tu veux ouvrir un canal entre deux processus pour transmettre des caractères, utilise un pipe.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Vodsky Voir le message
    Mon problème est le suivant :
    Entre chaque SIGUSR1 ou SIGUSR2 que j'envoie (pour un mot de 5 lettres j'envoie 5*7= 35 signaux) il faut mettre un temps de pause, nanosleep(2) dans mon cas,
    Et tu n'es même pas sûr que le signal a été pris en compte par l'autre process. Avec cette méthode, tu risque de perdre des bits ou même d'inverser des bits car je ne suis pas sûr que le respect de l'ordre des saiugnaux soit imposé.

    Les signaux ne servent pas à cela, comme indiqué plus haut, utilise un pipe, cela marchera mieux et sera plus performant.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    je vous remercie de vos réponse (j'ai mis du temps a repondre pour cause d'indisponibilité veuillez m'excuser), je n'étais pas au courant de l'utilisation des signaux mais de toute les manière dans cet exercice, les signaux SIGUSR1-2 m'étais imposer (surement a titre pédagogique...), mais je tien compte de votre façon de voir pour mes projet a venir.
    merci ce sujet est résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi de signaux comme sous linux ( kill(t_pid,integer) )
    Par Bleys dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 24/06/2008, 08h53
  2. [Multitache] Envoi de signaux
    Par Bleys dans le forum Langage
    Réponses: 4
    Dernier message: 17/06/2008, 22h07
  3. [Winsock] Envoi et recupération d'une image
    Par arnolanf dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/11/2002, 08h49
  4. [Socket]envoie de fichier!!!
    Par SamDaKap dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2002, 08h07
  5. Envoi de Datagrames par IP en JAVA
    Par the java lover dans le forum Développement
    Réponses: 2
    Dernier message: 14/08/2002, 11h44

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