Langage C

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Déc 2013, 17:24

ampholyte a écrit:Le problème c'est que j'ai dû mal à savoir quel est ta vrai question et sur quel partie tu coinces. La fonction snprintf ne concatène pas des chaines mais permet d'en construire à partir de paramètres.

J'avoue avoir du mal à comprendre dans quel but as-tu besoin d'ouvrir un dossier.


Effectivement; moi aussi je ne me serais pas compris =) j'ai édité le dernier post.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Déc 2013, 17:49

void close_disk_raid5(char* adresse)
{

while ((fichierLu = readdir(rep)) != NULL)

bad.
ndisk est à ta disposition, sers-t-en!
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Déc 2013, 19:30

fatal_error a écrit:bad.
ndisk est à ta disposition, sers-t-en!


Oui c'est vrai que c'était pas super logique ;)

Code: Tout sélectionner
void close_disk_raid5(char* adresse)
{
   int k;
   for(k=0;k<g_disk.ndisk;k++)
    {
      fclose(g_disk.storage[k]);   
   }
   closedir(rep);
}





D'ailleurs; j'aurais une question sur le sens; ou l'interprétation appelez ça comme vous voulez de ce qui est écrit ici:

Le RAID 5 n ;)ecessite au minimum 3 disques sur lesquels seront r ;)eparties les donn ;)ees. Un fichier de
donn ;)ees est d ;)ecoup ;)e en un ensemble de blocs de taille fixe de T octets. Ces blocs sont rep ;)er ;)es par leur
position dans l’ensemble des blocs de donn ;)ees. En fonction du nombre N de disques, les blocs sont
regroup ;)es par paquets de N ;) 1 blocs. A partir de ces N ;) 1 blocs, un bloc P appel ;)e bloc de parit ;)e ,
de taille T est calcul ;)e en appliquant l’op ;)eration bool ;)eenne XOR (not ;)e ;)) sur les donn ;)ees du paquet de
blocs.
On a ainsi la d ;)efinition de P : P = B 0 ;) B 1 ;) ... ;) B N ;)1 . L’op ;)erateur XOR poss`ede une propri ;)et ;)e
int ;)eressante permettant d’utiliser ce bloc P pour reconstruire un bloc B i manquant suite `a une panne de
disque. En effet, si P = B 0 ;) B 1 ;) ... ;) B N ;)1 alors B 0 = P ;) B 1 ;) ... ;) B N ;)1 , B 1 = B 0 ;) P ;) ... ;) B N ;)1
et ainsi de suite.
Les N ;) 1 blocs de donn ;)ees B i et le bloc de parit ;)e P sont regroup ;)es dans un tableau S contenant N
blocs de mˆeme taille qui constituent une bande. Cette bande est ensuite r ;)epartie sur les N disques en
faisant en sorte que les blocs de parit ;)es de deux bandes successives ne se retrouvent pas sur le mˆeme disque.


Imaginons que nous ayons des fichiers de N octets. Et que 1 Bloc est formé de B octet.

Une fonction qui demande le nombre de bloc demandera le nombre de bloc de donnée N/B ? Ou bien le nombre de bloc de donnée plus le nombre de bloc de parité; N/B + (N/B)/NB_DISK
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 11 Déc 2013, 19:37

ta citation parsemée d'espaces un peu partout est illisible.. :cry:
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 11 Déc 2013, 19:41

fatal_error a écrit:ta citation parsemée d'espaces un peu partout est illisible.. :cry:


Ben quand on fait un copier coller de pdf; il transforme tous les é en ' e :hum:
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 11 Déc 2013, 22:25

Je ne comprends pas toujours pas pourquoi tu fais un closedir(rep) dans une fonction qui ne possède pas de variable rep ^^.

Par ailleurs, tu n'as pas l'air d'avoir besoin d'utiliser les dossiers. Tu ne te concentres que sur des fichiers.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 12 Déc 2013, 00:45

rep est défini en global !

Je n'ai peut être pas besoin d'ouvrir et fermer le dossier; mais bon c'est pas forcement plus mal de le faire.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 12 Déc 2013, 10:00

Si ça ne te sert à rien ne le fait pas.

C'est comme si tu ouvrais et fermais un fichier dont tu n'as pas besoin. Supposons que ton programme plante au milieu, ton fichier reste ouvert ? (normalement non mais tu n'en n'es pas sûr).

Lorsqu'une variable n'est pas utile, il vaut mieux la supprimer, pour que plus tard tu puisses te relire sans te dire : "Putain mais elle sert à quoi cette variable ?"

De plus essaye d'éviter les variables globales, c'est le mal ! Je blague un peu mais ce n'est pas très recommandé (dans ton cas), il vaut mieux envoyé dans les paramètres de tes fonctions un pointeur sur la variable (ou la variable suivant ce que tu veux).

Très souvent les variables globales sont utilisées quand on a pas vraiment le choix.

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 12 Déc 2013, 11:02

A la limite, ce sont des paramètres globaux qui ne devraient pas pouvoir être modifiés, typiquement des chemins d'installation, ce qu'on trouve dans les fichiers .ini en gros.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 28 Déc 2013, 11:17

Aloa;

je cherche à réaliser une fonction qui permettrait d'écrire dans un fichier; à partir d'une certaines position donnée; j'ai pas énormément farfouillé sur le net, mais je n'ai rien trouver pouvant m'éclaircir sur un problème de ce genre; ou plutôt je n'ai pas réussi à décoder :marteau:

(En fait j'ai une connexion en mousse pour la durée des vacances et mes pages prennent presque 2 minutes à charger quand elles ne plantent pas è_é un peu chaud pour les recherches dans ces conditions là :( )

LA fonction fseek dont il est question ici pourrait peut être convenir : http://fr.openclassrooms.com/informatique/cours/apprenez-a-programmer-en-c/se-deplacer-dans-un-fichier

Seulement elle demande une position d'origine; hors lorsque je dois appeler ma fonction pour écrire je n'ai pas cette information là.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 28 Déc 2013, 14:14

Non, la fonction fseek permet de se déplacer dnas un fichier de 3 manières différentes
La fonction fseek fixe l'indicateur de position du flux pointé par stream.
La nouvelle position, mesurée en octets, est obtenue en additionnant offset octets au point de départ indique par whence.
Si whence vaut SEEK_SET, SEEK_CUR, ou SEEK_END, le point de départ correspond respectivement au début du fichier, à la position actuelle, ou à la fin du fichier.
Un appel réussi à fseek efface l'indicateur de fin de fichier pour le flux, et annule les effets de toute fonction ungetc(3) précédente sur le même flux.

Donc si tu veux modifier un endroit précis du fichier par exemple à l'offset 580 du début de fichier, tu fais fseek(File, 580, SEEK_SET)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 28 Déc 2013, 14:43

Dac; donc si j'utilise fseek comme tu l'as appelé, ça placera le curseur sur le "580 ème octet" de FILE et ensuite il suffit d'un fprintf pour écrire à cet endroit là ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 28 Déc 2013, 22:42

Oui, mais il ne faut pas oublier d'ouvrir le fichier en mode "r+", si tu l'ouvres en mode "w" ou "w+" le fichier est écrasé.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 29 Déc 2013, 06:52

Ta remarque me fait penser à quelque chose; peut on bouger le curseur avec fseek alors que les fichiers sont déjà ouvert en écriture ?
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 29 Déc 2013, 09:10

Je pense que oui, mais je n'en suis pas sur à 100%, en fait il faut tester !

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 30 Déc 2013, 13:41

Bonjour,

Pour indication voici un paragraphe de la norme C99 :

When a file is opened with update mode ('+' as the second or third character in the
above list of mode argument values), both input and output may be performed on the
associated stream. However, output shall not be directly followed by input without an
intervening call to the fflush function or to a file positioning function (fseek,
fsetpos, or rewind), and input shall not be directly followed by output without an
intervening call to a file positioning function, unless the input operation encounters end-
of-file. Opening (or creating) a text file with update mode may instead open (or create) a
binary stream in some implementations.


src : Norme C99 7.19.5.3 § 6 p 272 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 09 Juin 2014, 15:16

Hello,

existe il un type de variable permettant de demander la valeur à l'utilisateur (donc pas une constante vu que c'est l'utilisateur qui entre la valeur).
Mais une fois cette valeur entré, on veut la considérer comme une constante qui ne devra pas être modifié.
Au final si je fais un algo comme ça


Demander x
x=5;
x=x+1 // Cette ligne devrait m'afficher une erreur de compilation me prévenant que x est une valeur qui ne peut pas etre modifié. (comme avec un define en fait, sauf que là c'est l'utilisateur qui saisi quand même la valeur à la base)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 09 Juin 2014, 15:40

Rockleader a écrit:existe il un type de variable ... considérer comme une constante


Je ne croît pas que ça existe :lol3: .
Tu peut tjr créer un objet qui fasse ce que tu veux.

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 09 Juin 2014, 15:55

Tu peux lire la valeur dans une procédure à part !

Code: Tout sélectionner
const int val = read_value();

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 13:25

par Cliffe » 09 Juin 2014, 16:08

Il veut un type apparemment.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite