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 :

Communications et Ordonnancement de N processus


Sujet :

Linux

  1. #1
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Points : 96
    Points
    96
    Par défaut Communications et Ordonnancement de N processus
    Bonjour,

    Dans le cadre d'un TP de programmation system en C.
    Où en bref je ne doit pas laisser vide les file de politique
    d'ordonnancement SCHED_RR et SCHED_FIFO et SCHED_OTHER.

    voila je me demander si il y'a un moyen pour que un processus
    créés avec la fonction fork();(qui a la particularité de dupliqué
    tout les variable c.a.d: que je n'est pas la possibilité
    de modifier les variable d'un autre processus même en déclarant
    la var en globale ou static)

    Mon problème c'est que je veux communiquer la valeur
    d'une variable d'un processus fils avant qu'il se termine
    à un autre processus fils qui vient d'être crée par le même
    processus père des deux processus fils.

    Merci d'avance.

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    Ce que tu demandes n'est pas assez clair mais je vais essayer de te répondre.
    Quand tu crées un processus avec un fork(), les variables qui se trouvent dans le processus père sont dupliqués dans le fils. Le père et le fils peuvent modifier leurs variables mais cette modification ne sera visible que de leurs cotés.
    Si tu veux partager les variables entre pere/fils, tu utilises un segment de mémoire partagé, ou une file de message ou un tube tout en gérant la synchronisation dans les 2 premiers.

  3. #3
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Points : 96
    Points
    96
    Par défaut
    Merci,

    Pour le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     l'utilises un segment de mémoire partagé
    J’ai tester avec une variable globale et en plus déclaré statice (elle doit a voire un adresse fixe dans la mémoire pour tout les processus) est sa ne marche pas.

    Et pour ce cas je Meu demande c'est quoi la différance entre l'envoie de message en utilisant les signaux et l’utilisation des pipe. (NB : je n’est pas encore tester les envoie de message)

    Sinon pour les pipe c'est une solution je suis entrain de voire quelque code pour mieux comprendre:


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #include <stdio.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
     
    int f;
     
    //fonction de lecture du fils à partir du fichier
    void lec()
    {char c;
    lseek(f,-1,SEEK_CUR);
    read (f,&c,1);
    printf ("%c\n",c);
    }
     
    void ecr() {}
     
    main()
    {int i,pid; char c='a';
     
    f=open ("./fic.dat",O_RDWR|O_CREAT,S_IRWXU);
    pid=fork();
    if (pid==0)
    	{pid=getppid();
    	signal(SIGUSR1,lec);
    	for (i=0;i<10;i++)
    		{pause ();
    		sleep(1);
    		kill (pid,SIGUSR1);
    		}
    	}
    	else
    		{signal(SIGUSR1,ecr);
    		for(i=0;i<10;i++)
    			{write (f,&c,1);
    			c=c + (i % 5);
    			sleep(1);
    			kill (pid,SIGUSR1);
    			pause();
    			}
    		wait(); // le pére atant la términésant du fils
    		close(f);
    		}
    }
    Remercie

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/11/2010, 16h42
  2. Communication par pipe entre deux processus
    Par mohamedz dans le forum POSIX
    Réponses: 9
    Dernier message: 02/03/2010, 17h50
  3. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 09h55
  4. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  5. Communication entre processus
    Par markopolo dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/06/2003, 16h21

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