Que signifie exactement "d'où" faire? Je suis un peu confus par l'utilisation des termes "trous" et "données". Données des valeurs non nulles et les trous des valeurs égales à zéro?
Le whence régit ce que le décalage est relatif. Donc, si vous demandez à 10 octets avec SEEK_SET, il sera de 10 octets à partir du début du fichier. Si vous demandez de 6 octets avec SEEK_CUR, il sera de 16 octets à partir du début du fichier.
Ne vous inquiétez pas sur les lacunes et les trous. C'est faire face à la situation où vous cherchez passé la fin d'un fichier.
+1 pour cette réponse. Pour les programmes multi-thread, pread() et pwrite() sont mieux parce qu'ils n'affectent pas le fichier offset (si plusieurs threads peuvent lire le même descripteur de fichier, sans blocage et sans conditions de course entre lseek() et read()).
Vous pouvez demander à tout décalage par rapport au début ou à la fin du fichier, ou par rapport à la position actuelle.
Ne pas se laisser submerger par cette page de la bibliothèque. Voici quelques petits exemples d'utilisation et probablement tous la plupart des gens ne sera jamais besoin de:
lseek(fd,0, SEEK_SET);/* seek to start of file */
lseek(fd,100, SEEK_SET);/* seek to offset 100 from the start */
lseek(fd,0, SEEK_END);/* seek to end of file (i.e. immediately after the last byte) */
lseek(fd,-1, SEEK_END);/* seek to the last byte of the file */
lseek(fd,-10, SEEK_CUR);/* seek 10 bytes back from your current position in the file */
lseek(fd,10, SEEK_CUR);/* seek 10 bytes ahead of your current position in the file */
La lseek() fonction repositionne le décalage de la ouvrir fichier associé au descripteur de fichier fd à l'argument offset selon la directive whence comme suit:
SEEK_SET
Le décalage est réglé sur offset octets.
SEEK_CUR
Le décalage est réglé à son emplacement actuel, ainsi offset octets.
SEEK_END
Le décalage est réglé à la taille du fichier plus offset octets.
Oui, vous êtes à la recherche pour
lseek
.http://linux.die.net/man/2/lseek
whence
régit ce que le décalage est relatif. Donc, si vous demandez à 10 octets avecSEEK_SET
, il sera de 10 octets à partir du début du fichier. Si vous demandez de 6 octets avecSEEK_CUR
, il sera de 16 octets à partir du début du fichier.Il y a pread/pwrite fonctions qui acceptent l'offset du fichier:
pread()
etpwrite()
sont mieux parce qu'ils n'affectent pas le fichier offset (si plusieurs threads peuvent lire le même descripteur de fichier, sans blocage et sans conditions de course entrelseek()
etread()
).Oui. Vous utilisez le
lseek
fonction dans la même bibliothèque.Vous pouvez demander à tout décalage par rapport au début ou à la fin du fichier, ou par rapport à la position actuelle.
Ne pas se laisser submerger par cette page de la bibliothèque. Voici quelques petits exemples d'utilisation et probablement tous la plupart des gens ne sera jamais besoin de:
Bonne chance!
lseek()
et vous recevoir.lseek
et vouslfind
.Oui, vous pouvez utiliser
lseek()
: