Résultats de 1 à 8 sur 8

Sujet : fork et pipe appels système

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    4

    fork et pipe appels système

    lsut;
    j\'ai essaye de faire un simple programme ,pour echange d\'information entre deux processucse un fils et l\'autre pere,en utilisant fork et pipe ,le code et le suivant:[/b]
    Code:
    #include<stdio.h>
     main()
    {long int i;
    	char r[5],s[5];
    	int p[2];
    	pipe(p);
    	i=fork();
    	if (i==0)
    	{       printf(\"processus fils\\n\");
    		printf(\"donner un mot\\n\");
    		scanf(\"%s\",&s);
    		write(p[0],s,6);
    		printf(\"donner un autre mot\\n\");
    		scanf(\"%s\",&s);
    		write(p[0],s,6);exit(i);
    	}
    	else {if (i>0)
    		{       
    		
    			printf(\"processus pere\\n\");
    			read(p[1],&r,6);
    			printf(\"%s\\n\",&r);
    			read(p[1],&r,6);
    			scanf(\"%s\\n\",&r);
    		}
    		else printf(\"processus echoue\");
    		  }
    return 0; }
    ca apparu normale mais ca marche pas
    merci a l\'avance de vos seggestions,conseills,et pour quoi pas vos critiques.

  2. #2
    Membre MP
    Inscrit
    août 2013
    Messages
    329
    Je ne connais pas encore ces appels systèmes : tu px me donner un lien vers la doc que tu as utilisée ?

  3. #3
    Visiteur MP
    Visiteur MP
    vous peuvez voire le lien suivant pour fork()http://kafka.fr.free.fr/docs/prog_syst_linux-html/html/slide_34.html

  4. #4
    Membre MP
    Inscrit
    août 2013
    Messages
    329
    Tu as essayé en utilisant pid_t comme type pour i ?

  5. #5
    Visiteur MP
    Visiteur MP
    pid_t n\'est autre qu\'un int ... c po forcement ca qui va faire que ca marche ... tu peux tjrs essayer mais je pense pas que ca marche !

  6. #6
    Membre MP
    Inscrit
    août 2013
    Messages
    329
    Sûrement, j\'ai pas encore pris le tps de regarder. Si je rejoins ma machine cette semaine j\'essearai ton code.

  7. #7
    Visiteur MP
    Visiteur MP
    Tiens voila un exemple qui marche avec pipe et fork:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>		/* Pour pid_t (fork, getpid, getppid) */
    
    int main(void)
    {
      pid_t ident;
      int tube[2];			/* les deux descripteurs associés au tube */
      char message[20];		/* Une chaîne pour stocker les messages lus
    				 * dans le tube */
    
      
      if (pipe(tube) != 0)		/* Création du tube */
       {
         perror(\"pipe\");
         return EXIT_FAILURE;
       }
    
      ident = fork();		/* Création du fils */
      switch (ident)
      {
        case -1 :
          perror(\"fork\");
          return EXIT_FAILURE;
    
        case 0 : /* Fils */
          printf(\"Fils : j\'écris 17 caractères dans le tube\\n\");
          write(tube[1], \"Bonjour mon père\\0\", 17);
          while (getppid() != 1) /*On attend la mort du père */
          {                      /*avant de lire son message */
    	                     /*pour être sur qu\'il a bien*/
          }			     /*fini d\'écrire son message */
          printf(\"Fils : je lis 13 caractères dans le tube\\n\");
          read(tube[0], message, 13);
          printf(\"Fils : j\'ai lu \'%s\'\\n\", message);
          break;
        
        default : /* Père */
          printf(\"Père : je lis 17 caractères dans le tube\\n\");
          read(tube[0], message, 17);
          printf(\"Père : j\'ai lu \'%s\'\\n\", message);
          printf(\"Père : j\'écris \'Bonjour...\' dans le tube\\n\");
          write(tube[1], \"Bonjour fils\\0\", 13);
           
      }
    
       return EXIT_SUCCESS;
    }

  8. #8
    Visiteur MP
    Visiteur MP
    //voila meme ton code corrigé

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    #include <sys/types.h> /* Pour pid_t (fork, getpid, getppid) */

    int main(void)
    {
    long int i;
    char s[15],r[15];
    int p[2];

    pipe(p);
    i=fork();

    if (i==0)
    {
    printf(\"processus fils\\n\");

    scanf(\"%s\",s);
    write(p[1],s,15);

    scanf(\"%s\",s);
    write(p[1],s,15);

    exit(i);
    }

    else
    {
    if (i>0)
    {
    printf(\"processus pere\\n\");

    read(p[0],r,15);

    printf(\"%s\\n\",r);

    read(p[0],r,15);

    printf(\"%s\\n\",r);
    }

    else printf(\"processus echoue\");
    }

    return 0;
    } :wink: :wink: :wink: :wink:

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!