Que fait le puts
Résolu/Fermé
linquisiteur
-
Modifié par linquisiteur le 10/08/2013 à 10:37
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 11 août 2013 à 00:40
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 11 août 2013 à 00:40
4 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
10 août 2013 à 12:51
10 août 2013 à 12:51
1) Peut-être que tu devrais rajouter un fflush(stdout) après ton printf.
2) Il y a des incohérences dans ton programme, certaines fonction ouvre un fichier mais ne le ferme pas (exemple : somme et le file descriptor fichier). J'ai l'impression en plus que ce file descriptor est ouvert et fermé plusieurs fois. Tu devrais simplement passer ce FILE * en paramètre (depuis ton main vers ta fonction), l'ouverture et la fermeture du fichier seraient alors complètement gérée par la fonction main.
3) Pour qu'on puisse tester ton programme dans le même contexte, il faudrait nous donner le contenu de tes fichiers d'entrée (ainsi que semaphore.h).
Quelques conseils :
- évite les variables globales, ça rend le code illisible et ça conduit souvent à des défauts d'architecture pour ton code, bref c'est globalement une mauvaise habitude
- essaye d'indenter le code un peu mieux (par exemple vim ou n'importe quel IDE digne de ce nom permet d'indenter facilement du code),
- essaye d'avoir un code "symétrique" ça le rend plus lisible (par exemple un fopen devrait conduire dans cette même fonction à un fclose, de même qu'un malloc devrait conduire à un free).
Évidemment il y a des contre-exemples à ce deuxième point. Par exemple tu pourrais avoir une fonction toto_create qui fait des malloc et des fopen et toto_free qui fait les fclose / free correspondant, mais dans ce cas, ton code sera "symétrique" dans une autre fonction qui appellera probablement au même niveau toto_create et toto_free.
Bonne chance
2) Il y a des incohérences dans ton programme, certaines fonction ouvre un fichier mais ne le ferme pas (exemple : somme et le file descriptor fichier). J'ai l'impression en plus que ce file descriptor est ouvert et fermé plusieurs fois. Tu devrais simplement passer ce FILE * en paramètre (depuis ton main vers ta fonction), l'ouverture et la fermeture du fichier seraient alors complètement gérée par la fonction main.
3) Pour qu'on puisse tester ton programme dans le même contexte, il faudrait nous donner le contenu de tes fichiers d'entrée (ainsi que semaphore.h).
Quelques conseils :
- évite les variables globales, ça rend le code illisible et ça conduit souvent à des défauts d'architecture pour ton code, bref c'est globalement une mauvaise habitude
- essaye d'indenter le code un peu mieux (par exemple vim ou n'importe quel IDE digne de ce nom permet d'indenter facilement du code),
- essaye d'avoir un code "symétrique" ça le rend plus lisible (par exemple un fopen devrait conduire dans cette même fonction à un fclose, de même qu'un malloc devrait conduire à un free).
Évidemment il y a des contre-exemples à ce deuxième point. Par exemple tu pourrais avoir une fonction toto_create qui fait des malloc et des fopen et toto_free qui fait les fclose / free correspondant, mais dans ce cas, ton code sera "symétrique" dans une autre fonction qui appellera probablement au même niveau toto_create et toto_free.
Bonne chance
Merci je poste le code pour les semaphores. Il s'agit d'un code que j'emporte partout quand je les utilises.
semaphore.c
semaphore.h
Je pourrais faire un code plus "simple" mais vu que je prépare mes examen mon objectif est de mélanger un maximum de matière ensemble ce qui me fait un code pas beau.
Je vais tenter d'améliorer le code pour le rendre plus lisible. Ce que je veux faire dans le programme est de remplir 2 fichier texte. Le 1er avec une table de multiplication d'un x nombre sur x nombre. Chaque processus crée écrira une ligne dans multiplication2.txt et renverra le résultat par tube dans la seconde fonction, qui contiendra la somme de tout les résultat. Ces données ne servent à rien mais il s'agit d'un entrainement.
P.S possible d'éviter un fflush ?
Merci encore
semaphore.c
#include "semaphore.h" void initsema(semaphore s, int nb){ pipe(s); char c = 'x'; int i; for (i=0;i<nb;i++) write (s[1] , &c , 1); } void P(semaphore s){ char c; read (s[0], &c , 1); } void V(semaphore s){ char c = 'x'; write (s[1] , &c , 1); }
semaphore.h
#ifndef SP #define SP #include <stdio.h> #include <time.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> #include <sys/types.h> #include <math.h> typedef int semaphore[2]; void initsema(semaphore s, int nb); void P(semaphore s); void V(semaphore s); #endif
Je pourrais faire un code plus "simple" mais vu que je prépare mes examen mon objectif est de mélanger un maximum de matière ensemble ce qui me fait un code pas beau.
Je vais tenter d'améliorer le code pour le rendre plus lisible. Ce que je veux faire dans le programme est de remplir 2 fichier texte. Le 1er avec une table de multiplication d'un x nombre sur x nombre. Chaque processus crée écrira une ligne dans multiplication2.txt et renverra le résultat par tube dans la seconde fonction, qui contiendra la somme de tout les résultat. Ces données ne servent à rien mais il s'agit d'un entrainement.
P.S possible d'éviter un fflush ?
Merci encore
Problème résolu comme d'hab je passe 1h a chercher une erreur pour rien.. dans la 2eme fonction j'ouvre le mauvais fichier et donc écrase la partie du programme qui fonctionne.
J'ai changer le fopen
Merci pour l'aide
J'ai changer le fopen
Merci pour l'aide
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
11 août 2013 à 00:40
11 août 2013 à 00:40
Pas de problème, bonne continuation !