5. Strange and Interesting System Calls
- one strerror-equivalent per system call
- boundary conditions
- multiple causes for the same errno value
- multiple errno values for the same cause
- coders@slug mailing list
5.1 ENOMEDIUM
- of course, they are all frauds; slide
- Native English speakers don't know that “media” is a plural,
let alone that “medium” is its singular.
- this strerror(3) string is almost content-free.
- surely this could be more informative; slide
- O_NONBLOCK
- it also groks floppies, magnetic tapes, MMC card readers, etc
- disc-with-a-c vs disk-with-a-k
5.2 EFAULT
- one pointer is easy; slide
- must not disturb process (thread) signal handlers
- bounded memory: mincore(2)
- strings: lstat(2)
5.3 EMFILE
- The message includes the limit; slide
- can't use /proc
- sysconf(3) is very handy
- of course, it could be a single-open device that
is already open or mounted
5.4 ENFILE
- The message includes the limit; slide
- can't use /proc
- sysconf(3) is very handy
- this is when you read kernel sources
- system call with no [e]glibc binding
CTL_FS, FS_MAXFILE
5.5 EPERM vs ENOSYS
- also EINVAL sometimes
- same cause, different errno(3) values;
slide
- same errno(3) value, different causes;
slide
- wishlist: pathconf for "is this fops pointer non-null"
5.6 errno(3) is not always set
- slide
- somtimes they set errno(3),
sometimes they don't.
- traps for young players (old ones, too)
- not going into each one, read the paper
- who knew that fileno(3) could fail?
5.7 ENOSPC
- slide
- print the mount point
- work in progress (inodes vs data vs directory entries)
- special devices already includes device name...
- &...need to add device size, without altering state
- file systems print the mount point; slide
- devices are more specific
- work in progress: filesys case could drill down
- work in progress: not all devices this accurate
...because a CD-ROM is not writable
...because the memory card has the write protect tab set
...because the ½ inch magnetic tape does not have a write ring
5.9 rename(2)
- not talking about mv<(1)
- rename(2) directory over directory;
slide
- destination must be empty
- implies all the rmdir(2) errors as well
- but not files over directories, or vice versa
- who knew: dup2(2) is the same
- ...implies all the unlink(2) errors as well