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

Follow Lynxbee

Leave a Reply / Ask Question