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/09/29 12:01] 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 ======
programmation_c_gcc.1254225660.txt.gz · Dernière modification : 2009/09/29 12:01 de thierry