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
	free(filename);
	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

Android Android Commands Android Java Applications Application Libraries Bash / Shell Scripts Bluetooth driver Build Frameworks Commands and Packages Core Kernel C Programs Development Environment Setup Documents / Books Errors & Failures File Systems Framebuffer / Display Driver git Go Language Programs Hardware Platforms Home Kernel & Device Drivers Kernel Booting and Porting Linux, OS Concepts and Networking Linux Device Drivers Linux Host, Ubuntu, SysAdmin Linux Kernel Linux Networking Middleware Libraries, HAL NDK / Middleware / HAL Network Driver OS Concepts PHP Procfs Filesystem Programming Languages RaspberryPi Scripting and Automation Search Engine Optimisation ( SEO ) Social Media Socurce Code Management ( SCM ) System Administration, Security Testing and Debugging Uncategorized Userspace Utilities Web design and development Wordpress Yocto / Bitbake / Openembedded

Leave a Reply