[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