C – Tag mask reads and writes posix

Tag mask reads and writes posix… here is a solution to the problem.

Tag mask reads and writes posix

Checking the access pattern of a file is slightly more complicated because the O_RDONLY (0), O_WRONLY (1), and O_RDWR (2) constants do not correspond to individual bits in the open file status flag. So, for this check, we take the constant O_ACCMODE mask flag value and then test for equality with one of the constants:

accessMode = flags & O_ACCMODE; 

if (accessMode == O_WRONLY || accessMode == O_RDWR)               
    printf("file is writable\n");

I want to understand how the expressiin flag and O_ACCMODE work

Sorry, I wrote it in the wrong format on my phone

Solution

File patterns are mutually exclusive. You cannot be read-only and write-only, nor can you be read-write or one of the other.

O_ACCMODE equals 3, so bits 1 and 2 open.

   00000000 (O_RDONLY)
&  00000011 (O_ACCMODE)
   --------
   00000000  <-- the result being compared

where 00000000 equals read-only, so (accessMode == O_RDONLY) returns true.

The same goes for the others.

   00000001 (O_WRONLY)
&  00000011 (O_ACCMODE)
  ---------
   00000001 <-- the result being compared

O_WRONLY is 1,

so (accessMode == O_WRONLY) is “1 equals 1”, which naturally returns true.

Related Problems and Solutions