Homework #6 Due:Friday, December 5, 1997, at 11:59PM Points: 100 The C Programming Language Submitting: Put your program into files named as indicated and submit them as described in the All About Homework handout. Remember, we¹ll compile and run them on the DECs, so be sure they work there! (Note: if you use other file names, we will deduct 5 points.) Write a program that determines whether a user can access a file to perform the specified operation. The operation(s) are indicated by command-line options, and are: ­r read ­w write ­x execute For example, if your executable is named access, then access ­r bishop /etc/motd should print bishop can read /etc/motd Options may be combined; for example: access ­rwx bishop /etc/motd should print bishop can read /etc/motd bishop can write /etc/motd bishop cannot execute /etc/motd Only one user and one file may be named per command. If the user is given as an integer, assume that is a UID. For example: access -rw 917 /etc/passwd should print User 917 can read /etc/passwd User 917 cannot write /etc/passwd If the user¹s UID is 0, print the message That user is the superuser! and exit. If the object named as a file is a symbolic link, give the results that correspond to the target of the symbolic link (in other words, follow them). Hints: Use stat(2). The program user.c discussed in class (see the lecture notes for Lecture #9) gives an example of translating from names to UIDs and how to handle groups. The program finfo.c in ~cs40/samples shows you how to access the directory modes. Also, use getopt(3) for handling the options; it makes that part quite simple. The program prs.c (see the notes for lecture #8) gives an example of that also. Homework #6 ECS 40 ­ FALL 1997 Page 1