C program to test file permissions in Linux

One way to check the file permissions is using “access” system call.

 int access(const char *pathname, int mode); 

This system call requires a test mode to be passed, R_OK, W_OK, and X_OK test whether the file exists and grants read, write, and execute permissions, respectively.

 $ vim check_file_permissions.c 
#include <stdio.h> // for printf
#include <stdlib.h> // for malloc
#include <string.h> // for strcpy
#include <unistd.h> // for access
int main(int argc, char **argv) {
    int result;
    //allocate memory of 512 bytes
    char *filename = (char *)malloc(512);
    if (argc < 2) {
        strcpy(filename, "/usr/bin/adb");
    } else {
        strcpy(filename, argv[1]);
    result = access (filename, R_OK); // R_OK for readable
    if ( result == 0 ) {
        printf("%s is readable\n",filename);    
    } else {
        printf("%s is not readable\n",filename);    
    result = access (filename, W_OK); // W_OK for writeable
    if ( result == 0 ) {
        printf("%s is Writeable\n",filename);   
    } else {
        printf("%s is not Writeable\n",filename);   
    result = access (filename, X_OK); // X_OK for executable
    if ( result == 0 ) {
        printf("%s is executable\n",filename);  
    } else {
        printf("%s is not executable\n",filename);  
    //free allocated memory
    return 0;
 $ gcc -o check_file_permissions check_file_permissions.c 
$ ./check_file_permissions check_file_permissions.c
check_file_permissions.c is readable
check_file_permissions.c is Writeable
check_file_permissions.c is not executable

Now, lets check the file permissions of a binary file adb which is already installed as part of android utilities.

$ ./check_file_permissions
/usr/bin/adb is readable
/usr/bin/adb is not Writeable
/usr/bin/adb is executable

Leave a Comment