Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3018 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] probleme de lseek & write

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] probleme de lseek & write

n°691115
jerem38
Posté le 02-04-2004 à 17:41:33  profilanswer
 

bonjour, voila mon code :  

Code :
  1. int main (int argc, char ** argv){
  2. int fd;
  3. char * tampon;
  4. tampon = (char *) malloc(1);
  5. *tampon = '?';
  6. fd = open("test", O_RDWR|O_APPEND|O_NONBLOCK, S_IRWXU);
  7. while (1) {
  8.  write(fd,tampon,1);
  9.  lseek(fd,(off_t) 0, SEEK_SET);
  10. }
  11. exit(0);
  12. }


 
j'aimerais qu'il se positionne au début du fichier et qu'il écrive en boucle sur le 1er octet du fichier (oui, c'est un programme de test qui n'a aucun interet).
Mais il ne se passe pas ce que je voudrais.
avec "bonjour" comme chaine initiale dans mon fichier 'test' j'obtiens apres l'exécution :  

Code :
  1. bonjour
  2. ??????????????????????????????????????????????????????????????????????????????????????? ...


:sweat:
help please


Message édité par jerem38 le 02-04-2004 à 17:43:26
mood
Publicité
Posté le 02-04-2004 à 17:41:33  profilanswer
 

n°691139
Taz
bisounours-codeur
Posté le 02-04-2004 à 18:02:49  profilanswer
 

    char * tampon;
     tampon = (char *) malloc(1);
     *tampon = '?';  
 
 
[:rofl]

n°691253
nickman
Posté le 02-04-2004 à 19:19:35  profilanswer
 

Taz a écrit :

    char * tampon;
     tampon = (char *) malloc(1);
     *tampon = '?';  
 
 
[:rofl]


 
puisque tu as l'air de trouver ça amusant, aurais-tu la solution à son problème?
Pourquoi la fonction lseek, ne replace-t-elle pas la tête d'écriture au début du fichier à chaque itération?

n°691262
cricri_
Posté le 02-04-2004 à 19:29:28  profilanswer
 

Je sais que c'est un prg de test, mais de là à faire un malloc pour 1 caractère ... ;)

n°691264
Taz
bisounours-codeur
Posté le 02-04-2004 à 19:30:46  profilanswer
 

ben il suffit d'enlever le append
 

Code :
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <unistd.h>
  5. int main (int argc, char *argv[])
  6. {
  7.      int fd;
  8.      char tampon = '?';
  9.      fd = open("test", O_RDWR | O_NONBLOCK, S_IRWXU);
  10.      while (1)
  11.        {
  12.  write(fd, &tampon, 1);
  13.  lseek(fd, 0, SEEK_SET);
  14.        }
  15.      close(fd);
  16. }

n°691265
Taz
bisounours-codeur
Posté le 02-04-2004 à 19:31:21  profilanswer
 

Cricri_ a écrit :

Je sais que c'est un prg de test, mais de là à faire un malloc pour 1 caractère ... ;)
 

et alors ? un buffer est très souvent quelque chose à taille fixe, nul besoin de faire une allocation dynamqiue

n°691268
docmaboul
Posté le 02-04-2004 à 19:32:48  profilanswer
 

nickman a écrit :


Pourquoi la fonction lseek, ne replace-t-elle pas la tête d'écriture au début du fichier à chaque itération?


 
Vous obtenez ce résultat parce que vous ouvrez votre fichier avec le mode O_APPEND ce qui a pour principal effet que chaque écriture s'y déroule à la fin...

n°691269
cricri_
Posté le 02-04-2004 à 19:33:16  profilanswer
 

Nous sommes bien d'accord ;)

n°691288
jerem38
Posté le 02-04-2004 à 19:54:02  profilanswer
 

merci les gars
et ne vous fightez pas trop sur mon code ^^
 
enfin, je veux qd meme bien des remarques, chui un newbie en C  :D

n°691291
Taz
bisounours-codeur
Posté le 02-04-2004 à 19:55:33  profilanswer
 

alors pourquoi tu travailles pas avec les FILE* ?

mood
Publicité
Posté le 02-04-2004 à 19:55:33  profilanswer
 

n°691302
jerem38
Posté le 02-04-2004 à 20:09:00  profilanswer
 

ba en faite on developpe une library qui fait un peu le taff de stdio.h ^^ C un projet a l'ecole

n°691303
Taz
bisounours-codeur
Posté le 02-04-2004 à 20:09:50  profilanswer
 

c'est pas gagné :/

n°691502
matafan
Posté le 03-04-2004 à 05:13:41  profilanswer
 

Lors d'une conférence ils y a quelques semaines, Bjarne Stroustrup à encouragé chaque débutant à (essayer de commencer à) réécrire stdio (puis à vite l'effacer et à utiliser la version libc, bien sûr :D). C'est à la fois très instructif et beaucoup plus difficile qu'il n'y parrait.
 
Enfin tout ça pour dire que c'est une bonne idée, et... Bon courage !

n°691624
Taz
bisounours-codeur
Posté le 03-04-2004 à 12:51:05  profilanswer
 

stdio ? il a bu ou quoi ? stdio un un modèle anti-C++ à cause de ses E/S sans typage :o

n°691843
matafan
Posté le 03-04-2004 à 19:47:52  profilanswer
 

C'était une conf sur le « Multi-paradigm programming », qui consiste à appliquer différents styles de programmations là où ils sont le mieux adaptés. Stroustrup n'est pas seulement le père du C++, c'est aussi un spécialiste de nombreux autre langages. Le coup de stdio c'était juste un exemple pour prouver à ceux qui en doutent encore qu'il faut utiliser ce que proposent les bibliothèques.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] probleme de lseek & write

 

Sujets relatifs
problème Php / popupProblème de joker * et selection for-each
[C/C++] Probleme de link sous VC6probleme pointeur void alors qu'un cast de char* marche :\
problème de téléchargment de fichierProbléme fonction mail
Probléme avec une requête PHP/MySQLprobleme de window.open
problème de format de dateprobleme projet casse brique ...
Plus de sujets relatifs à : [C] probleme de lseek & write


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR