Partage
  • Partager sur Facebook
  • Partager sur Twitter

Communication entre processus

Sujet résolu
    26 mars 2020 à 10:34:01

    Bonjour , voila j'ai un td à rendre en systeme d'exploitation. Je dois utiliser la communication entre processus avec les tubes. J'arrive à écrire et lire des chaînes de caracteres, ainsi que des tableaux d'entiers. Mais je bloque sur les tableaux de chaînes de caractères. Voici le programme qui écrit le message :

    const char *tube = "canal";
    
    
    int main(int agrc, char *argv[]){
    	
    	
    	int desc;
    	char message[100];
    	char *arguments[] = {argv[1], argv[2]};
    	
    	
    	
    	desc = open(tube, O_WRONLY);
    	if(desc == -1){
    	printf("le tube %s est indisponible\n", tube);
    	}else{
    		
    	write(desc, &arguments, sizeof(arguments));
    	close(desc);
    	}
    
    	 
    	return 0;
    }


    et voici le le programme qui lit le message :

    void lecture(){
    	
    	//char tmp[100];
    	
    	int desc;
    	char *arguments[2];
    	int nbr;
    	
    	desc = open(tube_serveur, O_RDONLY);
    	if(desc == -1){
    		printf("le tube \"%s\" est indisponible\n", tube_serveur);
    	}else{
    		printf("le lecteur %d commence à lire \n", getpid());
    		
    		nbr = read(desc, arguments, sizeof(arguments));
    		printf("%s\n", arguments[0]);
    		
    		printf("la lecture est finie !!\n");
    		close(desc);
    	
    	
    	}	
    }


    mon problème est le suivant, j'ai une erreur de segmentation quand je veux afficher un élément de mon tableau char *arguments[]

    -
    Edité par Pierre-louisChardon 26 mars 2020 à 10:34:26

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2020 à 10:45:39

      arguments est un tableau de deux pointeurs.

      Read va cherche quelques octets dans desc (8 ou 16, un truc comme ça) et les met dans arguments.

      Ensuite printf considère que arguments[0] devrait contenir l'adresse d'une chaine situés dans l'espace mémoire du processus. Il n'y a aucune raison que ça marche.

      -> le write ne vaut pas mieux.

      Ce qu'il faut transmettre, c'est le contenu des chaines. Pas leur adresse.


      -
      Edité par michelbillaud 26 mars 2020 à 10:47:19

      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2020 à 11:11:12

        Merci à toi, j'ai envoyé chaque éléments de mon tableaux et cela fonctionne.
        • Partager sur Facebook
        • Partager sur Twitter

        Communication entre processus

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown