Bitwise Permissions System - Complete Example

Unix-style permissions: User/Group/Other × Read/Write/Execute = 9 bits in one byte.

Like chmod 755, 644 - store all permissions compactly.

1. Permission Model

TEXT
Bit positions
Byte: 7 6 5 | 4 3 2 | 1 0 0
         Other   Group   User
       R/W/E   R/W/E   R/W/E

Examples:
755 = 111 101 101
644 = 110 100 100

Each triplet = 1 byte section.

2. Define Permission Bits

C
Permission constants
#define U_READ  0400  // 100000000 User Read
#define U_WRITE 0200  // 010000000 User Write
#define U_EXEC  0100  // 001000000 User Execute
#define G_READ  0040  // 000100000 Group Read
#define G_WRITE 0020  // 000010000 Group Write
#define G_EXEC  0010  // 000001000 Group Execute
#define O_READ  0004  // 000000100 Other Read
#define O_WRITE 0002  // 000000010 Other Write
#define O_EXEC  0001  // 000000001 Other Execute

3. Permission Functions

C
Complete permission API
// Test permission
int hasPermission(int perms, int flag) {
    return (perms & flag) != 0;
}

// Grant permission
int grantPermission(int perms, int flag) {
    return perms | flag;
}

// Revoke permission
int revokePermission(int perms, int flag) {
    return perms & ~flag;
}

4. Complete Working System

C
Full permissions manager
#include <stdio.h>

#define U_READ 0400
#define U_WRITE 0200
#define U_EXEC 0100
#define G_READ 0040
#define G_WRITE 0020
#define G_EXEC 0010
#define O_READ 0004
#define O_WRITE 0002
#define O_EXEC 0001

int hasPermission(int perms, int flag) {
    return (perms & flag) != 0;
}

int main() {
    int file_perms = 0;
    
    // chmod 755
    file_perms = U_READ | U_WRITE | U_EXEC | G_READ | G_EXEC | O_READ;
    printf("755 = 0%o (octal)\n", file_perms);
    
    printf("User READ: %s\n", hasPermission(file_perms, U_READ) ? "YES" : "NO");
    printf("Group WRITE: %s\n", hasPermission(file_perms, G_WRITE) ? "YES" : "NO");
    
    // Revoke group write (644)
    file_perms = revokePermission(file_perms, G_WRITE);
    printf("After revoke G_WRITE: 0%o\n", file_perms);
    
    return 0;
}

Output: 755 octal permissions with testing.

5. chmod Equivalents

TEXT
Common permission sets
chmod 777 = U/G/O all permissions
chmod 755 = rwxr-xr-x
chmod 644 = rw-r--r--
chmod 600 = rw-------

In code:
#define CHMOD_755 (U_READ|U_WRITE|U_EXEC|G_READ|G_EXEC|O_READ)
#define CHMOD_644 (U_READ|U_WRITE|G_READ|O_READ)

6. Binary Visualization

TEXT
755 permissions breakdown
755 = 111 101 101
     U:111 G:101 O:101
    rwxr-xr-x ✓

Bit positions:
765 432 10
rwx r-x r-x

Conclusion

Complete Unix-style permissions system using 9 bits!

Used in Linux, embedded systems, file servers.