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

Réseau C Discussion :

programmation c sous unix HELP ME PLEASE


Sujet :

Réseau C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Points : 17
    Points
    17
    Par défaut programmation c sous unix HELP ME PLEASE
    bonjour tout le monde,
    enfaite j ai un petit programme à réaliser!! programmation C sous Unix
    il faut que je fasse une communication entre plusieurs processus qui permettent aux différents utilisateurs de s envoyer des messages format texte!!(en utilisant des tubes nommés)
    ceci implique le fait que je dois connecter sur une même machine unix (pas besoin de socket) ces différents utilisateurs!!
    j ai essayer d avancer dans le reste du projet mais j arrive toujours pas à faire la connexion!! donc j arrive toujours pas à vérifier si mon programme marche ou pas!!!
    j ai fait quelques recherches!!

    enfaite j ai essayé ça comme truc juste pour la connexion:

    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
    //je crée mon fifo directement dans le shell: $mkfifo -m  0666 monfifo
    //je donne au groupe l accès d'écriture et d'exécution: $chmod g+rw monfifo
     
    int main(int argc,char**argv[]) 
    { 
           system(./HOME);
    	if(nb=fork())<0)
    	{perror("erreur fork()");
    	exit(1);
    	}
     
    	if(nb==0){    /*creation d un tube pour un utilisateur*/
    	g=getpid();
    	c=getenv("user");
    	printf("l'utilisateur est: %s",c)
    	if (mknod ("../c/fifo", S_IFIFO | 0666,0) == -1) 
    	{ perror ("erreur de création fifo");
    	exit (1);}
    	system(chmod g+w);
    	if(mkfifo(ffils=open("../c/fifo",O_WRONLY))==-1)||(mkfifo(fpere=open("monfifo",O_RDONLY,O_NONBLOCK)))==-1{
    	perror("erreur d ouverture ");
    	exit(1);
    	} }
     
     
    	while(1){
    	while(buf[s_buf]=getchar()!='\n'){
    	write(ffils,buf,160*sizeof(char));
    	read(fpere,buf,160*sizeof(char));
    	}


    et donc a chaque fois que quelqu'un lance mon programme je prends son nom pour peut être après l utiliser pour créer un tube pour l'utilisateur en question
    j en suis pas sûre!!


    autrement comment je fais pour créer un fifo pour chacun des utilisateurs?
    et comment je fais pour affecter getenv a une variable que je pourrai utiliser après?

    si vous pouvez m aider svp

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 401
    Points : 23 780
    Points
    23 780
    Par défaut
    Bonjour,

    Ouille ! Il y a un festival d'erreurs de syntaxe dans ton programme ! As-tu au moins essayé de le compiler ? Prenons les choses dans l'ordre :

    Citation Envoyé par tousa Voir le message
    j ai essayer d avancer dans le reste du projet mais j arrive toujours pas à faire la connexion!!
    Il n'y a pas de « connexion » à effectuer lorsque tu utilises des tubes nommés. C'est une ouverture de fichier normale. Attention : ce n'est pas un socket : il n'y a qu'un lecteur et qu'un rédacteur à la fois.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc,char**argv[])
    C'est « char ** argv » ou « char * argv[] » mais pas les deux.

    Ça, ça ne risque pas de marcher. Il faut passer une chaîne à system() et même si tu le faisais (avec des guillemets), la syntaxe ne serait pas correcte (HOME, tel quel, ne correspond à rien). Si tu cherches à changer de répertoire, il faudrait utiliser « chdir » ou « cd », et cet emplacement serait perdu dès la fin de system(). Enfin, ce n'est pas à ton programme de gérer cela.

    Supprime cette ligne.

    Il manque une parenthèse (ouvrante).

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g=getpid();
    c=getenv("user");
    printf("l'utilisateur est: %s",c)
    • Tes variables « g » et « c » ne sont pas déclarées ;
    • USER doit s'écrire en majuscule. En outre, tu ne peux pas affirmer que cette variable d'environnement sera toujours définie.


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mknod ("../c/fifo", S_IFIFO | 0666,0) == -1)
    • Tu ne peux pas affirmer non plus que l'utilisateur dispose forcément d'un home dir, ni qu'il porte son nom ;
    • « c », ici, cherchera le répertoire nommé « c ». C'est complètement indépendant du pointeur « c » que tu utilises au-dessus.
    • Si tu es déjà censé te trouver dans le home dir de l'utilisateur, pourquoi remonter et y réentrer ? Crée ton tube directement : « fifo ».;


    • Même remarque qu'au-dessus concernant les chaînes ;
    • Tu ne précises pas le nom du fichier !


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    mkfifo(ffils=open("../c/fifo",O_WRONLY))==-1)
    • « mkfifo » signifie « Make FIFO » (crée un FIFO). C'est l"équivalent de ton mknod(). Pourquoi ces appels à cet endroit-là ? ;
    • C'est une erreur de syntaxe en plus d'être une erreur tout court : mkfifo() attend une chaîne indiquant le nom du tube à créer. Pas un descripteur de fichier ouvert par open().


    Corrige déjà cela, on verra le reste ensuite.
    Bon courage.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    oui merci bcp obsidian je vais corriger ça et je vous tiendrai au courant de l évolution de mon programme

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

Discussions similaires

  1. programme sous unix help
    Par mustapha_smist dans le forum C
    Réponses: 4
    Dernier message: 16/05/2011, 23h07
  2. Réponses: 4
    Dernier message: 04/05/2009, 13h26
  3. modification de programme .pc sous unix
    Par gege87270 dans le forum Shell et commandes GNU
    Réponses: 33
    Dernier message: 01/10/2007, 08h50
  4. Programmation systeme sous Unix
    Par Premium dans le forum Linux
    Réponses: 9
    Dernier message: 11/03/2006, 09h40

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