#1 Le 12/10/2006, à 20:39
- raspac
[Résolu] Création d'un tube FIFO en C
Bonjour,
voilà j'ai un petit soucis avec la création d'un tube FIFO. Je ne sais pas si ça vient de mon code, mais je ne pense pas, mais lors de son exécution, un message d'erreur "Operation not permitted" qui concerne la création du tube. La compilation quant à elle ne retourne aucune erreur.
C'est bizarre car les droits du dossier sont à 777, et j'arrive à créer un fichier quelconque.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
const char nomFifo[]="./bal.fifo";
int main()
{
int errFifo, descFifo;
// création du tube
errFifo=mkfifo(nomFifo,0666);
if(errFifo==-1)
{
perror("echec creation tube");
exit(1);
}
// ouverture du tube
descFifo=open(nomFifo, O_RDONLY);
if(descFifo==-1)
{
perror("echec ouverture tube");
exit(1);
}
close(descFifo);
}
Merci d'avance pour toutes aides, merci merci merci.
Dernière modification par raspac (Le 12/10/2006, à 22:29)
Hors ligne
#2 Le 12/10/2006, à 21:37
- Crashforburn
Re : [Résolu] Création d'un tube FIFO en C
essaies de lancer avec sudo
J'y connais rien en tubes, mais ça vient peut-être des droits utilisateurs...
Un blog inutile de plus : http://crashforburn.free.fr/dotclear/
[Membre du club des beaux Ubunteros] : http://forum.ubuntu-fr.org/viewtopic.php?pid=535299
Contre la nouvelle année, votons fonacon : http://www.fonacon.net/
Hors ligne
#3 Le 12/10/2006, à 21:42
- snapshot
Re : [Résolu] Création d'un tube FIFO en C
Chez moi, il marche sans problème... la première fois seulement !
Ensuite, le pipe est créé, et ça fait planter le mkfifo.
Cependant, l'erreur est "File exists" et non pas "Operation not permitted" -> c'est un problème de droit.
Essaye de le lancer en étant dans /tmp au moyen d'un cd (tout le monde à droit d'écrire dedans)
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#4 Le 12/10/2006, à 21:43
- raspac
Re : [Résolu] Création d'un tube FIFO en C
Flûte, ça ne change rien avec le sudo.
Mais avec la méthode du /tmp ça marche parfaitement.
Merci beaucoup
Dernière modification par raspac (Le 12/10/2006, à 21:46)
Hors ligne
#5 Le 12/10/2006, à 21:56
- snapshot
Re : [Résolu] Création d'un tube FIFO en C
c'est normal : même le root n'a pas le droit de créer un pipe qui existe déjà. C'est ainsi qu'est conçue la fonction mkfifo : c'est une erreur de créer un tube qui existe déjà.
Si ça marche sur /tmp, c'est juste par ce que le programme n'y avait jamais été exécuté, mais ça plantera lors de sa deuxième exécution.
Ton programme ne doit créer le fifo que s'il n'existe pas, ou alors le détruire une fois qu'il n'en a plus besoin. Comme ça, le problème est définitivement réglé !
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#6 Le 12/10/2006, à 21:59
- raspac
Re : [Résolu] Création d'un tube FIFO en C
Merci encore, mais le problème n'était pas l'existence antérieur du pipe, c'était seulement sa création pour je ne sais quelles raisons.
Car maintenant j'ai l'erreur "File exists" mais ce n'est pas un problème pour mon programme.
Hors ligne