summaryrefslogtreecommitdiff
path: root/fcntl_flags.c
blob: 539bbebaf6a9795c751b622f33e506c6e8a6ee38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <fcntl.h>

void display_flags(char *, unsigned int);
void binary_print(unsigned int);

int main(int argc, const char *argv[])
{
  display_flags("O_RDONLY\t\t", O_RDONLY);
  display_flags("O_WRONLY\t\t", O_WRONLY);
  display_flags("O_RDWR\t\t", O_RDWR);
  printf("\n");
  display_flags("O_APPEND\t\t", O_APPEND);
  display_flags("O_TRUNC\t\t", O_TRUNC);
  display_flags("O_CREAT\t\t", O_CREAT);
  printf("\n");
  display_flags("O_WRONLY|O_APPEND|O_CREAT", O_WRONLY|O_APPEND|O_CREAT);

  return 0;
}

void display_flags(char *label, unsigned int value)
{
  printf("%s\t: %d\t:", label, value);
  binary_print(value);
  printf("\n");
}

void binary_print(unsigned int value)
{
  unsigned int mask = 0xff000000;
  unsigned int shift = 256*256*256;
  unsigned int byte, byte_iterator, bit_iterator;

  for (byte_iterator = 0; byte_iterator < 4; byte_iterator++) {
    byte = (value & mask) / shift;
    printf(" ");
    for (bit_iterator = 0; bit_iterator < 8; bit_iterator++) {
      if (byte & 0x80)
        printf("1");
      else
        printf("0");
      byte *= 2;
    }
    mask /= 256;
    shift /= 256;
  }
}