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

Bibliothèques, systèmes et outils C Discussion :

Envoyer un message à un autre processus avec son PID


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai Avatar de K-store
    Homme Profil pro
    étudiant en informatique
    Inscrit en
    août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant en informatique

    Informations forums :
    Inscription : août 2017
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Envoyer un message à un autre processus avec son PID
    Bonjour a tous,
    J'aimerais pouvoir créer une sorte de tchat en connectant deux programmes a l'aide de leur PID
    Je galère énormément a trouver des fonctions qui pourrais m’être utile(j'ai lu le man de signal/sigaction/getpid/kill) et parcouru les forums en quêtes en réponse mais je n'ai rien trouvé.
    je vous donne la page qui m'a le plus documenté : https://www.engineersgarage.com/embe...n-raspberry-pi
    merci d'avance pour vos réponse.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 160
    Points : 32 353
    Points
    32 353
    Par défaut
    Et ou bloques tu ?

    Le lien que tu as fourni + les mans devrait être suffisant.

    Pour envoyer le signal, tu utilises la fonction kill qui attendra le pid destinataire et le signal à envoyer SIGUSR1 normalement pour un signal personnalisé. Il faudra avoir fixé le handler de signal dans le code du process récepteur via la fonction sig_set_handler (voire exemple dans ton lien).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre à l'essai Avatar de K-store
    Homme Profil pro
    étudiant en informatique
    Inscrit en
    août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant en informatique

    Informations forums :
    Inscription : août 2017
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    merci pour votre réponse,
    j'ai effectuer des test avec signal et kill et j'arrive a envoyer un signal SIGUSR1 ou SIGUSR2.
    mais j'ai du mal a comprendre la fonction sig_set_handler, permet elle de créer un signal personnalisée(une string) ?

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 160
    Points : 32 353
    Points
    32 353
    Par défaut
    la fonction va créer le lien entre un signal et une fonction personnalisée. Cette fonction sera exécutée lors de l'interception du signal y étant lié.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre à l'essai Avatar de K-store
    Homme Profil pro
    étudiant en informatique
    Inscrit en
    août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant en informatique

    Informations forums :
    Inscription : août 2017
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    merci pour l'explication, je pense avoir mieux cerné la chose.
    mais je ne comprends pas comment je pourrais transmettre un buffer depuis kill vers sigaction
    sinon la fonction sigaction permet t'elle de binder une valeur a un signal ?
    En fait ce que je voudrais faire c'est: bind une valeur(un int par ex) a un signal(si c'est possible), l'envoyer a un autre programme qui le recevra avec sigaction et qui affichera la valeur reçu par exemple.
    Exemple :

    Le programme qui recoit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <stdlib.h>
    #include <unistd.h>
    #include <include/my.h>
    #include <sys/types.h>
    #include <signal.h>
     
    static void handler(int unused, siginfo_t * info, void * unused_ptr)
    {
        int value = info->si_value.sival_int;
        my_put_nbr(value);
    }
     
    int main(int argc, char **argv)
    {
        struct sigaction action;
     
        my_putstr("my_pid : ");
        my_put_nbr(getpid());
        my_putchar('\n');
        my_putstr("waiting for enemy connection...");
        action.sa_flags = SA_SIGINFO;
        action.sa_sigaction = handler;
        sigfillset(&action.sa_mask);
        while(1) {
            sigaction(SIGUSR1, &action, NULL);
        }
    }
    Le programme qui envoie en prenant en seul paramètre le PID du programme qui recoit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <stdlib.h>
    #include <unistd.h>
    #include <include/my.h>
    #include <sys/types.h>
    #include <signal.h>
    #include <fcntl.h>
    #include <stdio.h>
     
    void handler()
    {
      //modification de la valeur a envoyer ici ?
    }
     
    int main(int argc, char **argv)
    {
        struct sigaction action;
     
        action.sa_flags = 0;
        action.sa_handler = handler;
        sigemptyset(&action.sa_mask);
     
        sigaction(SIGUSR1, &action, NULL);
        kill(my_getnbr(argv[1]), SIGUSR1);
    }

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 160
    Points : 32 353
    Points
    32 353
    Par défaut
    Si j'ai bien compris, en plus du signal, tu veux envoyer une valeur ?
    Dans ce cas, regardes la fonction sigqueue

    Après tu peux aussi utiliser des messages queue mais je ne maitrise pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre à l'essai Avatar de K-store
    Homme Profil pro
    étudiant en informatique
    Inscrit en
    août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant en informatique

    Informations forums :
    Inscription : août 2017
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    oui merci c'est exact, j'ai déjà fais un prog qui utilise sigqueue mais je n'ai pas le droit de l'utiliser dans le cadre de mon projet.
    existe t'il un moyen d'envoyer un int avec kill et sigaction a un autre programme.
    je vous remercie d'avance pour votre aide

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 160
    Points : 32 353
    Points
    32 353
    Par défaut
    Pas avec kill.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Membre à l'essai Avatar de K-store
    Homme Profil pro
    étudiant en informatique
    Inscrit en
    août 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : étudiant en informatique

    Informations forums :
    Inscription : août 2017
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    merci pour votre aide,
    bonne soirée a vous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/10/2018, 14h12
  2. ADVANCE_QUEUING: comment envoyer un message à une autre session ?
    Par farenheiit dans le forum Administration
    Réponses: 1
    Dernier message: 17/09/2009, 10h43
  3. envoyer un message pour autre ordinateur avec dos
    Par zidenne dans le forum Développement
    Réponses: 11
    Dernier message: 09/09/2006, 18h44
  4. Envoyer des messages à d'autres postes en réseau
    Par Wilco dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/07/2005, 12h32

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