Para acceder a estos flags o simplemente para
activarlos es necesario utilizar operadores a nivel de bit. Veámoslo en un
ejemplo.
La llamada al sistema ``open'' (en POSIX) necesita que se le especifique que hacer con el fichero a abrir: crearlo si no existe, sobreescribirlo si existe, no sobreescribirlo, etc.
int open(const char *path, int flags);
//Donde:
// path --> indica el path de donde se encuentra el fichero
// flags --> indica lo que queremos hacer con el fichero ...
//
//Flags puede ser:
// O_CREAT Si el fichero no existe, será creado.
// O_EXCL Cuando se combina con O_CREAT, se considerará un
// error que el fichero ya exista.
// O_TRUNC Si el fichero ya existe, será truncado.
// O_APPEND El fichero se abrirá en modo de sólo-añadir.
// O_NONBLOCK El fichero se abre en modo no bloqueante.
// ...
Si queremos abrir el fichero ``/tmp/tutorial_c.txt'' en modo lectura y que se pueda escribir al final del mismo pondremos:
int fd;
fd = open ("/tmp/tutorial_c.txt", O_CREAT | O_APPEND );
// también lo podríamos hacer "a pelo":
// open ("/tmp/tutorial_c.txt", 0x440)
write(fd, "Hola mundo...\n", 14);
close (fd);
Aunque normalmente no se suelen utilizar, es bueno conocer como actúan estos operadores y de cuales disponemos.
|
c1 = 0x45 --> 01000101
c2 = 0x71 --> 01110001
---------------------------
c1 & c2 = 0x41 --> 01000001
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
i1 | i2 = 0x57 --> 01010111
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
i1 ^ i2 = 0x14 --> 00010100
c = 0x45 --> 01000101
----------------------
~c = 0xBA --> 10111010
| c = 0x1C | 00011100 | |
| c |
c = 0x38 | 00111000 |
| c |
c = 0x07 | 00000111 |