Langage C
Discutez d'informatique ici !
-
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 !
-
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

-
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 lensemble 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 lop

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 . Lop

erateur XOR poss`ede une propri

et

e
int

eressante permettant dutiliser 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 meme 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 meme 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 !
-
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

-
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..

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 !
-
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.
-
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 !
-
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.
-
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-fichierSeulement 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)
-
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é.
-
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 !
-
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
-
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.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités