[Linux-bruxelles] C sous unix -- re-help
Dusausoy Bruno
fa071488 at skynet.be
Sam 11 Jan 18:06:46 CET 2003
Le sam 11/01/2003 à 16:47, Stanislas Rusinsky a écrit :
> re-HELP!
>
> J'ai beau chercher je ne trouve pas... Une erreur de segmentation qui
> doit être toute bête mais je n'arrive pas a mettre la main dessus, qq'un
> pourrais regarder au code? j'ai allégé le prg de tout ce qui ne buggais
> pas pour isoler la faute...
>
Bon, je n'ai malheureusement pas trouvé la faute mais je peux te dire
qu'il ne faut pas de point-virgule ";" après une accolade qui ferme un
bloc d'instructions.
Exemple :
if (mkfifo (nom_fifo_reponse, perm_file) != 0 ) {
fprintf (stderr, "Impossible de créer le noeud fifo \n");
exit (1);
}
Si tu savais utiliser un débugger (gdb par exemple) ou tout simplement
mettre plus d'output, ce serait plus facile (tu délimiterais mieux le
problème) pour nous (pour moi en tout cas :) ).
> encore merci,
Euh .. de rien, j'ai rien fait :)
> #include <fcntl.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <sys/dir.h>
> #include <errno.h>
> #include <string.h>
> #include <stdio.h>
> #define NO_HUP_SIG 1
>
> const char * FIFOS_DIRECTORY = "/tmp/osd_mkfifo_client_serveur";
> extern int errno;
> mode_t perm_file = 0770;
> mode_t perm_rep = 0770;
>
>
>
> int traiter (const char * nom_fifo) {
> char * buf;
> FILE * fichier;
> int fd, i, j;
> char nom_fifo_reponse [50];
> char * pid_client_char;
>
> strcpy (nom_fifo_reponse, "fifo_reponse");
>
> pid_client_char = (char *) malloc ( (strlen (nom_fifo) + 1) * sizeof (char) );
> buf = (char *) malloc ( 128 * sizeof (char) );
> fd = open (nom_fifo, O_RDONLY);
> fichier = fdopen(fd, "r");
> read (fd, buf, sizeof (buf) - 1 );
> i = 27; j = 0;
> if (mkfifo (nom_fifo_reponse, perm_file) != 0 ) {
> fprintf (stderr, "Impossible de créer le noeud fifo \n");
> exit (1);
> };
> fd = open (nom_fifo_reponse, 0);
> fichier = fdopen(fd, "w");
> write (fd, "reponse", 7);
> return 0;
> };
>
>
> int main (int argc, char * * argv)
> {
> DIR * dir_pointer;
> struct dirent * dirent_pointer;
>
> if ( (mkdir (FIFOS_DIRECTORY, perm_rep)) != 0 ) {
> if ( errno == EEXIST ) fprintf (stdout, "Direcotry already exists, continuing"); /*si dir existe déjà, sort du if*/
> else { fprintf (stdout, "directory could'nt be created.....");
> if ( errno == ENOSPC ) {
> fprintf ( stdout, "Filesystem is full, or disk quota has been reached, exiting....\n" );
> };
> exit(1);
> };
> }
> /*else fprintf (stdout, "Directory created");
> */
> chmod (FIFOS_DIRECTORY, perm_rep);
> chdir (FIFOS_DIRECTORY);
> dir_pointer = opendir (FIFOS_DIRECTORY);
> while ( NO_HUP_SIG ) {
> dirent_pointer = readdir (dir_pointer);
> if (dirent_pointer == NULL)
> rewinddir (dir_pointer);
> if ( (strcmp (dirent_pointer->d_name, ".") == 0 ) || ( strcmp (dirent_pointer->d_name, ".." ) == 0) ) continue;
> fprintf (stdout, "test avant traiter");
> traiter (dirent_pointer->d_name);
> fprintf (stdout, "après traiter");
> unlink (dirent_pointer->d_name);
> };
>
> return (0);
> }
>
--
Dusausoy Bruno
bruno.dusausoy at skynet.be
-= Bleue est la mer, blanche est la mort =-
Plus d'informations sur la liste de diffusion Linux-bruxelles