Forum Programmation.autre Communication interne et externe des programmes

Posté par  (site web personnel) .
Étiquettes : aucune
0
6
oct.
2004
Bonjour les gens,
j'ai une appli qui vérifie toutes les n millisecondes un signal binaire, en interne pas de problème, une variable et c'est fini. Mais si c'est un programme exterieur qui gère ce signal. Une création/destruction de fichier suffit ? Une lecture/écriture dans le fichier ? C'est lent un disque ... Un socket spécial métaphore pipe fifo lifo reverse en mémoire ?

Un exemple :)
Le programme AAA, en python, vérifie toutes les 40 ms si le signal est 1 ou 0.
Le programme BBB, en C, tourne en fond et passe le signal à 1 quand il y a un son reçu par un micro, à 0 quand le son s'arrète.
Le programme CCC, en Ocaml, tourne aussi en fond et passe le signal à 1 quand la souris bouge, à 0 quand elle s'arrète.
BBB et CCC passe quoi à 0 et 1 (fichier créé ou pas, valeur dans un fichier, etc.)
AAA scrute quoi ?

PS : ça ne tourne que sous GNU/Linux et normalement il n'y a qu'une "source" de signal :)
  • # IPC

    Posté par  . Évalué à 4.

    Pour Inter Process Communication, est une couche logiciel chargé d'envoyer/recevoir des Signaux.
    un man kill (qui porte mal son nom) te mettras sur la voie, ou un petit google sur les linux ipc.
    • [^] # Re: IPC

      Posté par  (site web personnel) . Évalué à 3.

      Je regarde aussi man signal, merci !
      J'aimerai éviter une couche "communication directe".
      C'est pour ça que je pensais passer par un fichier mais je trouve ça un peu "sale" et lent.
      • [^] # Re: IPC

        Posté par  . Évalué à 2.

        Pourquoi sale ?
        Sous linux tu as un acces au fichiers qui s'apelle "select " ou pselect qui place le processus appelant en sommeil (conso mini de cpu car oté du scheduler) jusqu'as que le fichier change d'etat
        changer d'etat veut dire que la date du fichier a changé, qu'un nouvelle ecriture a eut lieu (nouvelle donné dispo) et tout ca.
        Donc c'est propre (charge cpu reguler par la disponibilité des data ou non) et n'est pas trop lent (ton appli est placé en tete du scheduler parce qu'il t'as mis en sommeil explicitement).
        • [^] # Re: IPC

          Posté par  (site web personnel) . Évalué à 2.

          Je trouvais sale (moins maintenant ;p ) d'écrire, lire ou créer, supprimer en continue sur le disque juste pour une valeur binaire :)
          • [^] # Re: IPC

            Posté par  . Évalué à 1.

            Utilise un ramdisk temporaire pour stocker ton flag-fichier. Ca evitera de faire clignoter cette petite led et de faire tourner ton DD (Tu fera ainsi des économies d'énergie, et tu contribura a la sauvegarde de l'environnement).
            • [^] # Re: IPC

              Posté par  (site web personnel) . Évalué à 2.

              On n'est plus au temps du DOS, maintenant on a des caches. Ça ne clignotera pas.
    • [^] # Re: IPC

      Posté par  (site web personnel) . Évalué à 2.

      Ca marche super bien ça :D

      En fait, c'est peut être pas mal avec deux handler sur
      10) SIGUSR1
      12) SIGUSR2

      Sur 10, le signal est à 0
      Sur 12, le signal est à 1

      Ou alors juste une inversion de la valeur sur reception de 10

      Hehe merci les gens !
  • # les fifo, c'est bo

    Posté par  (site web personnel) . Évalué à 4.

    Et même que le man de mkfifo est explicite :

    A "FIFO" is a special file type that permits independent processes to communicate. One process opens the FIFO file for writing, and another for reading, after which data can flow as with the usual anonymous pipe in shells or elsewhere.
  • # typo

    Posté par  . Évalué à 3.

    s/métaphore/sémaphore ? :)
  • # machintructitre

    Posté par  . Évalué à 2.

    T'utilises un semaphore et t'evites de faire un truc degueulasse qui poll toutes les 40ms, avec le semaphore ton soft sera alerte quand la semaphore change de valeur, plus besoin d'aller regarder toutes les 40ms.

    En passant, ton soft m'a l'air legerement bugge.

    Si BBB passe a 1, le son continue et en meme temps CCC passe le signal a 0 car la souris s'est arretee, ton soft qui se reveille toutes les 40ms verra rien du tout.

    D'ou l'interet d'utiliser un systeme d'events plutot qu'un polling, et surtout d'utiliser 2 signaux differents pour 2 evenements differents plutot que faire un truc avec 1 seule variable mais qui marche pas...
    • [^] # Re: machintructitre

      Posté par  (site web personnel) . Évalué à 2.

      Mon soft ne se "reveille" pas toutes les x ms, il vérifie ce signal toutes les x ms. C'est légèrement différent enter temps il continue à faire des trucs avec ses p'tites papates.

      Quand j'utilise le clavier comme source, j'utilise KeyUp et KeyDown, je regardes pas toutes les x ms à quoi ressemble le clavier.

      Je vois pas trop comment metre en place un sémaphore qui sera mlodifié par un programme exterieur. Mais t'es sur que c'est un sémaphore qui est utilisé pour ça ? Pour moi, les semaphores sont utilisés pour faire des compteurs de ressources ...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.