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/11/30 14:16] thierryprogrammation_c_gcc [2010/07/13 16:16] (Version actuelle) thierry
Ligne 2: Ligne 2:
  
 ====== debug ====== ====== debug ======
 +
 +===== core dump =====
 +
 +Lien: http://www.cyberciti.biz/tips/linux-core-dumps.html
 +
 ===== memory leak ===== ===== 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 Lien: http://www.devx.com/tips/Tip/20915
  
Ligne 35: Ligne 47:
 ===== backtrace ===== ===== backtrace =====
 Lien: http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes 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 ===== ===== uuid =====
Ligne 42: Ligne 106:
   # aptitude install uuid-dev   # aptitude install uuid-dev
  
-Composer: +Composer **''uuid_test.c''** 
-FIXME+  #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: Compiler:
-  $ gcc -g -Wall -std=gnu99 -o uuid uuid_test.c -luuid+  $ gcc -o uuid uuid_test.c -luuid
  
 Executer: 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.1259590608.txt.gz · Dernière modification : 2009/11/30 14:16 de thierry