Exemple

Cet exemple est tiré du source de LINUX. Il s'agit d'un fragment de gestion de la mémoire virtuelle, une structure page a été définie :
struct page {
   struct inode *inode;
   unsigned long offset;
   struct page *next_hash;
   atomic_t count;
   unsigned flags; /* atomic flags, some possibly updated asynchronously */
   ...    /*   d'autres champs   */
   };
Dans cette structure, le champs flags est un ensemble de bits définis ci-après :
/* Page flag bit values */
#define PG_locked                0
#define PG_error                 1
#define PG_referenced            2
#define PG_uptodate              3
#define PG_free_after            4
#define PG_decr_after            5
Puis le programmeur a défini des macros pour tester commodément ces bits à l'aide de la fonction test_bit définie par ailleurs :
/* Make it prettier to test the above... */
#define PageLocked(page)        (test_bit(PG_locked, &(page)->flags))
#define PageError(page)         (test_bit(PG_error, &(page)->flags))
#define PageReferenced(page)    (test_bit(PG_referenced, &(page)->flags))
#define PageUptodate(page)      (test_bit(PG_uptodate, &(page)->flags))
#define PageFreeAfter(page)     (test_bit(PG_free_after, &(page)->flags))
#define PageDecrAfter(page)     (test_bit(PG_decr_after, &(page)->flags))



Matthieu Moy 2012-06-20