Outils pour utilisateurs

Outils du site


programmation_c_gcc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
programmation_c_gcc [2009/06/05 12:44] thierryprogrammation_c_gcc [2010/07/13 16:16] (Version actuelle) thierry
Ligne 1: Ligne 1:
  
 +
 +====== debug ======
 +
 +===== core dump =====
 +
 +Lien: http://www.cyberciti.biz/tips/linux-core-dumps.html
 +
 +===== memory leak =====
 +
 +==== cas 1 ====
 +
 +Essayer: **''valgrind''**
 +
 +Lien: http://www.cyberciti.biz/faq/valgrind-check-for-memory-leaks-in-c-programs/
 +
 +==== cas 2 ====
 +Lien: http://www.devx.com/tips/Tip/20915
 +
 +Essayer "mtrace".
 +
 +  $ man mtrace
 +
 +  #include <mcheck.h>
 +  
 +  void foo( void )
 +  {
 +    // FIXME
 +    // lot of malloc/realloc/free usage
 +  }  
 +  
 +  void int main( void )
 +  {
 +    setenv("MALLOC_TRACE","/tmp/mtrace.txt",1);
 +  
 +    mtrace();
 +  
 +    foo();
 +  }
 +
 +  $ gcc -g -o foo foo.c
 +  
 +  ./foo
 +  
 +  $ mtrace foo /tmp/mtrace.txt | less
 +
 +===== backtrace =====
 +Lien: http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes
 +
 +====== Divers ======
 +===== flock =====
 +Accès partagé, coopératif, à un fichier.
 +
 +==== logs ====
 +Pour écrire en fin de fichier (des logs par exemple)
 +
 +Soit un fichier de log ouvert comme cela:
 +
 +  if ( -1 == (fd=open(filename,O_WRONLY|O_CREAT,0644)) ) {
 +    perror("open");
 +  }
 +  else {
 +    // ... suite plus bas...
 +  }
 +
 +Donc:
 +| fd | descripteur du fichier ouvert en ecriture seule |
 +
 +On bloque ainsi, à partir de la fin du fichier:
 +  // bloquer l'acces au fichier
 +  struct flock lock;
 +  
 +  memset( &lock,0,sizeof(lock) );
 +  
 +  lock.l_type = F_WRLCK;
 +  lock.l_whence = SEEK_END;
 +  lock.l_start = 0;
 +  lock.l_len = 0;
 +  
 +  if ( -1==fcntl(fd,F_SETLKW,&lock) ) perror("lock log");
 +  else {
 +    // ... suite plus bas...
 +  }
 +Voila, c'est bloqué, à partir de la fin du fichier (connu a cette instant) et au dela.
 +
 +On imagine qu'on se positionne a la fin du fichier et qu'on ecrit dedans...
 +
 +Pour retirer le verrou... il faut debloquer __tout__ le fichier !
 +  memset( &lock,0,sizeof(lock) );
 +  
 +  lock.l_type = F_UNLCK;
 +  lock.l_whence = SEEK_SET;
 +  lock.l_start = 0;
 +  lock.l_len = 0;
 +  
 +  if ( -1==fcntl(fd,F_SETLKW,&lock) ) perror("lock log");
 +
 +J'ai calé quelques instants sur cette "fonctionalité".
 +
 +D'autant plus qu'il n'y a pas de remonté d'erreur si le "F_UNLCK" est sans effet.
 +
 +===== uuid =====
 +Creer des identifiants unique de sessions...
 +
 +Installer les "lib" et "includes":
 +  # aptitude install uuid-dev
 +
 +Composer **''uuid_test.c''** :
 +  #include <unistd.h>
 +  #include <stdlib.h>
 +  #include <stdio.h>
 +  #include <string.h>
 +  #include <uuid/uuid.h>
 +  
 +  int main( int argc, char *argv[] )
 +  {
 +    uuid_t myid;
 +    char buf[36+1];
 +    
 +    // generer uuid (16 chars)  
 +    uuid_generate(myid);
 +  
 +    // le rendre human readable
 +    uuid_unparse(myid,buf); 
 +  
 +    printf("uuid=%s\n",buf);
 +  
 +    return EXIT_SUCCESS;
 +  }
 +
 +Compiler:
 +  $ gcc -o uuid uuid_test.c -luuid
 +
 +Executer:
 +  $ ./uuid
 +  uuid=33045d19-1469-4c2b-a151-a7b927621af4
 +
 +Existe aussi en ligne de commande: 
 +  $ uuidgen
 +  a0fdf4f1-9fb5-4c0e-8f23-f330b3af65fc
  
 ====== utf8 ====== ====== utf8 ======
Ligne 266: Ligne 405:
  
 Voila. Voila.
 +
 +==== DOS ====
 +
 +Lien: http://gedcom-parse.sourceforge.net/doc/encoding.html
 +
 +
 +La conversion d'un fichier DOS vers Linux peut fonctionner comme cela:
 +  $ iconv -f CP437 old-minitel-powa.h >minitel-powa.h
 +
 +Conversion par lot:
 +  $ cd dosfile
 +  $ find * -exec iconv -f CP437 {} -o ../{} \;
  
 ===== En perl ===== ===== En perl =====
Ligne 271: Ligne 422:
 Lien: http://perl.enstimac.fr/DocFr/perluniintro.html Lien: http://perl.enstimac.fr/DocFr/perluniintro.html
  
 +==== base ====
  
 Par defaut, le compilateur Perl ignore (volontairement pour des questions de compatibilité ascendante) l'environnement UTF-8. Par defaut, le compilateur Perl ignore (volontairement pour des questions de compatibilité ascendante) l'environnement UTF-8.
Ligne 322: Ligne 474:
 et pour un fichier déjà ouvert: et pour un fichier déjà ouvert:
   binmode( $handle , ":utf8" );   binmode( $handle , ":utf8" );
 +
 +==== encode ====
 +Exemple pour jongler entre "utf8" et le mode par defaut.
 +  my $m = "Vidéo";
 +  
 +  utf8::encode($m);
 +  
 +  print "Aprés encode: $m de longueur ", length( $m ) , "\n";
 +  
 +  utf8::decode($m);
 +  
 +  print "Aprés decode: $m de longueur ", length( $m ) , "\n";
 +
 +Sortie écran:
 +  Aprés encode: Vidéo de longueur 6
 +  Aprés decode: Vidéo de longueur 5
  
programmation_c_gcc.1244205870.txt.gz · Dernière modification : 2009/06/05 12:44 de thierry