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 2017-02-08