[cs631apue] final exam grades
Jan Schaumann
jschauma at stevens.edu
Sun Dec 18 18:50:03 EST 2011
Hello,
I will be sending out your final exam grades in a little while. Here
are some notes and correct answers for the final (the final itself is
available on the course website):
1) What is the effect of lseek(fd, 10, SEEK_END) where fd is a valid
file descriptor for the process calling lseek?
Correct answer:
B. The file offset pointer for the descriptor fd is set 10 bytes beyond
the current end of file. That is, a subsequent write will write data
10 bytes past the current end, creating a so-called sparse file.
2) Consider the following file:
-r--r--r-- 3 jans wheel 0 Dec 1 14:00 file
Calling 'unlink("./file")' as user 'jans' from within this directory
will have the following effect:
Correct answer:
A. The directory entry "file" will be removed from the current
directory.
Well, technically it's possible that the unlink call will fail if the
current directory does not have write permissions for user 'jans', but
since you do not have that information you'd either have to answer 'none
of the above' or guess that A is correct.
Recall that write permissions on the file itself are irrelevant to the
act of unlinking a file.
3) What is the difference between _exit(2) and exit(3)?
Correct answers:
A. _exit(2) starts with an underscore, while exit(3) does not
B. _exit(2) is a system call, while exit(3) is a library function
4) Name 4 reasons for open(2) to fail (with an example).
I was looking for any of the things listed in the manual page under
ERRORS.
5) fork(2) returns
A. the pid of the child to the parent, because a parent may have
multiple children, and there is no way to say "what's the pid of child
X"
B. 0 to the child, because a process can always get its own pid via
getpid(2) and its parent's pid via getppid(2)
6) Every process has a process ID and a parent process ID. Name 4
other properties of a process.
Things of interest: signal mask, umask, ulimit, session id, process
group, environment, resource utilization, ...
7) If process A calls fork, creating process B, and process B then calls
fork again, creating process C, and process C calls exec to overlay
itself with the new program image, in what order do the processes run
after the first fork call?
Correct answer:
D. There is no fixed order.
8) Suppose you wish to update the ctime on a given file. The
correct function to use is:
Correct answers:
A. open()
B. touch()
C. utimes()
D. stat() is not correct -- stat does not change anything about the
file, nor does it actually access the file itself (if it did, it would
update the atime, and thus the ctime), but only the metadata of the
file.
9) Name 4 system calls that may block. For each, give an example of how
to avoid blocking.
read, write, send, recv, open, accept, wait, ...
avoid blocking by setting non-blocking via fcntl, in open flags etc,
use select to identify fds ready for IO etc.
10) 12 points
Consider the files "file1" "file2" "dir/file3" and "dir/file4" with the
permissions as indicated below. For each file, list all users
(jschauma, root, all users in group wheel, all users in group sys, all
users in group users, all other users) who may
(a) read the file
(b) write the file
(c) remove the file
If the answer is non-obvious, explain.
$ groups jschauma
users wheel
$ pwd
/tmp
$ ls -lad .
drwxrwxrwt 4 root wheel 512 Jul 20 17:35 .
$ ls -la file1 file2 dir
----rw--w- 1 jschauma wheel 0 Jul 20 17:35 file1
-rw-r--r-- 1 root sys 0 Jul 20 17:33 file2
dir:
total 16
drwxrwx--- 2 root wheel 512 Jul 20 17:34 .
drwxrwxrwt 4 root wheel 512 Jul 20 17:35 ..
-rw------- 1 jschauma wheel 0 Jul 20 17:33 file3
-r--rw-r-- 1 root wheel 0 Jul 20 17:33 file4
(a) file1: root (owner jschauma does not have read permissions;
technically, owner jschauma could change permissions and then read,
though)
file2: everybody
file3: root, jschauma
file4: root, group wheel, jschauma (b/c jschauma is in group wheel, which 'dir'
is restricted to; others can't read since they can't access 'dir')
(b) file1: everybody but jschauma, effectively; jschauma owns the file
so could change permissions and then write, though
file2: root
file3: root, jschauma
file4: root, users in group wheel, jschauma (by virtue of being in group wheel)
(c) file1: root, jschauma (note sticky bit set on the directory)
file2: root
file3: root, all users in group wheel (including jschauma)
file4: root, all users in group wheel
11) Write a program 'revline' that, given an arbitrarily large text
file, reverses the contents line by line (but does not reverse the words
in the file).
No comment since the extra-credit assignment is still open.
12) Implement the lock(1) command.
Things I was looking for:
- turn of echo on terminal before reading password
- compare passwords, obviously
- install signal handlers for SIGINT and SIGALRM:
- SIGALRM handler simply exits the program
- SIGINT handler prints diagnostic message and time remaining
(ie keep track of time)
- set alarm
- loop forever and read
And that is all. I will keep your blue books until next semester. If
you'd like to get it back, please let me know at the beginning of the
spring semester and meet me prior to my class (I won't be on campus
until then, I'm afraid).
-Jan
More information about the cs631apue
mailing list