[C] probleme de lseek & write

probleme de lseek & write [C] - C - Programmation

Marsh Posté le 02-04-2004 à 17:41:33    

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
Reply

Marsh Posté le 02-04-2004 à 17:41:33   

Reply

Marsh Posté le 02-04-2004 à 18:02:49    

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

Reply

Marsh Posté le 02-04-2004 à 19:19:35    

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?

Reply

Marsh Posté le 02-04-2004 à 19:29:28    

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

Reply

Marsh Posté le 02-04-2004 à 19:30:46    

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

Reply

Marsh Posté le 02-04-2004 à 19:31:21    

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

Reply

Marsh Posté le 02-04-2004 à 19:32:48    

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

Reply

Marsh Posté le 02-04-2004 à 19:33:16    

Nous sommes bien d'accord ;)

Reply

Marsh Posté le 02-04-2004 à 19:54:02    

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

Reply

Marsh Posté le 02-04-2004 à 19:55:33    

alors pourquoi tu travailles pas avec les FILE* ?

Reply

Marsh Posté le 02-04-2004 à 19:55:33   

Reply

Marsh Posté le 02-04-2004 à 20:09:00    

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

Reply

Marsh Posté le 02-04-2004 à 20:09:50    

c'est pas gagné :/

Reply

Marsh Posté le 03-04-2004 à 05:13:41    

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 !

Reply

Marsh Posté le 03-04-2004 à 12:51:05    

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

Reply

Marsh Posté le 03-04-2004 à 19:47:52    

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.

Reply

Sujets relatifs:

Leave a Replay

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