pb d'utilisation de fseek

pb d'utilisation de fseek - C - Programmation

Marsh Posté le 14-09-2006 à 11:53:37    

Bonjour,
 
Je souhaiterais savoir ce que fait la commande suivante:
 
fseek(fichier, 8L, 0)
 
Depuis le début de fichier, on se déplace de 8 octets ou bien de 32 octets? (vu qu'un long vaut 4 octets)
Merci!
 
S.

Reply

Marsh Posté le 14-09-2006 à 11:53:37   

Reply

Marsh Posté le 14-09-2006 à 12:20:46    

Déjà, utiliser SEEK_SET plutôt que "0" pour le troisième argument me semblerait plus judicieux.
 
Ensuite, le paramètre offset est de type long. Ici, 8L dit juste "8, qui est un long", le type de la variable ne modifie pas sa valeur. La définition de fseek() est claire : le paramètre offset désigne un nombre de bytes, à partir de la position donnée par le troisième paramètre (SEEK_SET, SEEK_CUR ou SEEK_END).
 
Donc, cette ligne place le curseur au 8e byte (et non octet) à partir du début du fichier.
 

sandra771 a écrit :

(vu qu'un long vaut 4 octets)


 
Sur ta machine, peut-être. Mais ce n'est pas un cas général !
La norme définit que la plage minimum d'un long est "-2147483647 => 2147483647", selon les machines ça peut être plus.

Message cité 1 fois
Message édité par Elmoricq le 14-09-2006 à 12:23:10
Reply

Marsh Posté le 14-09-2006 à 13:38:39    

Merci pour la réponse, mais je pensais que byte et octet c'était la même chose???  
 
Sinon, comment puis-je savoir la plage d'un type sur ma machine?
 
Sandra

Reply

Marsh Posté le 14-09-2006 à 13:58:13    

sandra771 a écrit :

Merci pour la réponse, mais je pensais que byte et octet c'était la même chose???


 
L'octet désigne 8 bits. Le byte désigne la plus petite plage adressable.
Cet article explique très bien la différence : http://fr.wikipedia.org/wiki/Byte
 
 

sandra771 a écrit :

Sinon, comment puis-je savoir la plage d'un type sur ma machine?


 
A l'aide de sizeof, qui te retourne le nombre de byte d'un type donné, tu peux déduire la taille d'un type sur ta machine. Mais il vaut mieux tout simplement s'en tenir à la norme et considérer la plage minimale définie comme étant celle effectivement disponible.
Les cas où tu dois connaître la taille effective d'un type ne sont pas courants.

Reply

Marsh Posté le 14-09-2006 à 14:23:28    

Merci pour tes explications,
Sandra

Reply

Marsh Posté le 14-09-2006 à 14:46:06    

Elmoricq a écrit :

... la plage minimum d'un long est "-2147483647 => 2147483647"...


-2147483648 => 2147483647... [:aloy]

Message cité 2 fois
Message édité par Sve@r le 14-09-2006 à 14:47:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-09-2006 à 14:47:24    

Elmoricq a écrit :

L'octet désigne 8 bits. Le byte désigne la plus petite plage adressable.
Cet article explique très bien la différence : http://fr.wikipedia.org/wiki/Byte
Les cas où tu dois connaître la taille effective d'un type ne sont pas courants.


 
Byte = octet en anglais
1 octet = 1 byte = 8 bits

Reply

Marsh Posté le 14-09-2006 à 14:50:36    

mbarekh a écrit :

Byte = octet en anglais
1 octet = 1 byte = 8 bits


Cher inconnu, je crains que tu ne fasses erreur. Déjà il ne faut pas croire que parce qu'un mot dans une langue est remplacé par un mot dans une autre langue que l'un est l'exacte traduction de l'autre. par exemple, les anglosaxons emploient le mot "free" là où nous employons le mot "libre". Or les deux ne se traduisent pas l'un par l'autre.
 
Par ailleurs, as-tu pris la peine d'aller consulter le lien fourni par Elmoricq (http://fr.wikipedia.org/wiki/Byte) ? Il est dommage que les contributions de certains ne soient pas plus prises en considérations par d'autres. Cela amène des erreurs regrettables au sein de ce forum et les débutant(e)s pourraient en faire les frais !!!

Message cité 1 fois
Message édité par Sve@r le 14-09-2006 à 15:07:03

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-09-2006 à 14:53:35    

Sve@r a écrit :

Non !!! :non:  
 
T'es allé voir la page donnée par Elmoricq au-moins ? => : http://fr.wikipedia.org/wiki/Byte
 
Ca me tue les gens qui ramènent leur grain de sel sans avoir pris la peine de se documenter et qui, évidemment, ramènent un truc faux !!!


 Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours.
et essaie d'être un peu plus poli stp!  

Reply

Marsh Posté le 14-09-2006 à 14:56:10    

Sve@r a écrit :

-2147483648 => 2147483647... [:aloy]


 
Tu es sûr ? [:dawa]
 
http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf  
Page 22 :

Citation :

— minimum value for an object of type long int
LONG_MIN -2147483647 // −(2^31 − 1)
— maximum value for an object of type long int
LONG_MAX +2147483647 // 2^31 − 1

Message cité 1 fois
Message édité par Elmoricq le 14-09-2006 à 14:58:05
Reply

Marsh Posté le 14-09-2006 à 14:56:10   

Reply

Marsh Posté le 14-09-2006 à 14:57:37    

mbarekh a écrit :

Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours.
et essaie d'être un peu plus poli stp!


 
Aucune raison de ne pas utiliser la terminologie exacte. Ca ne fait pas appel à des notions compliquées, c'est mieux que de se vautrer dans l'erreur, et il n'y a aucune raison pour qu'un byte == 8 indéfiniment.

Reply

Marsh Posté le 14-09-2006 à 15:08:07    

mbarekh a écrit :

...et essaie d'être un peu plus poli stp!


T'as tout à fait raison. J'ai donc réécrit mon post...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-09-2006 à 15:10:29    

Elmoricq a écrit :

Tu es sûr ? [:dawa]


Ben j'ai bêtement compté les nombres possibles sur 31 bits [:dawa] :sol:

Message cité 1 fois
Message édité par Sve@r le 14-09-2006 à 15:14:23

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-09-2006 à 16:18:08    

Sve@r a écrit :

Ben j'ai bêtement compté les nombres possibles sur 31 bits [:dawa] :sol:


J'veux pas dire d'anerie, mais est-ce que la norme défini "-(2^31 - 1) " comme limite inférieure, pour laisser libre ce qu'on fait de 0x80000000, qui pose un peu problème (t'as 0x00000000 qui est zéro, et 0x80000000 qui est zéro aussi, mais "négatif" ) ?
 
Et du coup plein d'implémentations fonctionnent avec un nombre négatif de plus que de nombres positifs, à cause de ça ?
 
Bon je suis pas du tout sûr de ce que j'avance...


Message édité par Elmoricq le 14-09-2006 à 16:20:12
Reply

Marsh Posté le 14-09-2006 à 16:42:50    

Sve@r a écrit :

-2147483648 => 2147483647... [:aloy]


Non. Ca c'est quand l'implémentation est de type 'complément à deux'. Le cas général minimum garanti est bien  
 
-2147483647 .. +2147483647
 
(sign + magnitude, complément à 1) ...
 
Suffit de lire la norme...


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:47:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-09-2006 à 16:44:52    

mbarekh a écrit :

Byte = octet en anglais
1 octet = 1 byte = 8 bits


C'est la journée des bêtises...
 
Un octet fait exactement 8 bits.
 
En C, un byte fait au moins 8 bits (et exactement CHAR_BIT bits pour une implémentation donnée : <limits.h> ). Il n'y a pas d'octets (du moins de façon portable).
 
En télécom (réseaux etc.), il y a des octets.


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:46:42

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-09-2006 à 16:53:03    

sandra771 a écrit :

Sinon, comment puis-je savoir la plage d'un type sur ma machine?


Tout est défini dans le <limits.h> de ton implémentation.
 
CHAR_BIT
INT_MIN
INT_MAX etc.
 
Afin d'être portable, je conseille néanmoins de s'en tenir aux minima définis par la norme :  
 
http://mapage.noos.fr/emdel/init_c.htm#type


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-09-2006 à 16:55:56    

mbarekh a écrit :

Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours.


Ben pas sur le très actuel DSP TMS320C64 de Texas Instrument où il fait 16 bits...  
 
Ne pas oublier que la plupart des applications réelles (pas scolaires) écrites en C tournent sur des plateformes plus ou moins exotiques. Y'a pas que le PC dans la vie...


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:57:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed