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.
Codecrown