Answer:
/*
 Student: Hugo Meza
 Date: February 15, 2019
 Description: This program mimic the cat command from Linux. Checks whether the source file
 has the right permissions, and then writes in the console its content.
*/
#include <stdio.h>
#include <fcntl.h> 
#include <unistd.h>
#include <errno.h>
int hasPermission(char *filepath){
 int returnval;
 // Check file existence 
 returnval = access (filepath, F_OK); 
 if(errno == ENOENT){
 printf ("%s does not exist\n", filepath);
 return 0;
 }
 else if (errno == EACCES){
 printf ("%s is not accessible\n", filepath);
 return 0;
 }
 // Check read access
 returnval = access (filepath, R_OK);
 if(errno == ENOENT){
 printf ("%s does not have read access\n", filepath);
 return 0;
 }
 else if (errno == EACCES){
 printf ("%s is not accessible\n",filepath);
 return 0;
 }
// Check write access
 returnval = access (filepath, W_OK);
 if(errno == ENOENT){
 printf ("%s does not have read access\n", filepath);
 return 0;
 }
 else if (errno == EACCES){
 printf ("%s is not accessible\n",filepath);
 return 0;
 }
 return 1;
}
int main(int argc, char* argv[]){
 if(!argv[1]){
 printf("Error. Specify file to open\n");
 return 0;
 }
 int fd;
 char *fp = argv[1], content[fd];
 if(hasPermission(fp) == 0)
 return 1;
 
 fd = open(fp, O_RDONLY);
 int bytes = read(fd,content,sizeof(content)-1);
 write(1, content, bytes);
 close(fd);
 return 0;
}
Explanation: