<font size=2 face="sans-serif">For a write or create operation ENOSPC
would make some sense.</font><br><font size=2 face="sans-serif">But if the file already exists and I'm
just opening for read access I would be very confused by ENOSPC.</font><br><font size=2 face="sans-serif">How should the system respond: "Sorry,
I know about that file, I have it safely stored away in HSM, but it is
not available right now. Try again later!"</font><br><br><font size=2 face="sans-serif">EAGAIN or EBUSY might be the closest
in ordinary language... </font><br><font size=2 face="sans-serif">But EAGAIN is used when a system call
is interrupted and can be retried right away... </font><br><font size=2 face="sans-serif">So EBUSY?</font><br><br><font size=2 face="sans-serif">The standard return codes in Linux are:</font><br><br><tt><font size=2>#define EPERM 1
/* Operation not permitted */</font></tt><br><tt><font size=2>#define ENOENT
2 /* No such file or directory */</font></tt><br><tt><font size=2>#define ESRCH 3
/* No such process */</font></tt><br><tt><font size=2>#define EINTR 4
/* Interrupted system call */</font></tt><br><tt><font size=2>#define EIO
5 /* I/O error */</font></tt><br><tt><font size=2>#define ENXIO 6
/* No such device or address */</font></tt><br><tt><font size=2>#define E2BIG 7
/* Argument list too long */</font></tt><br><tt><font size=2>#define ENOEXEC 8
/* Exec format error */</font></tt><br><tt><font size=2>#define EBADF 9
/* Bad file number */</font></tt><br><tt><font size=2>#define ECHILD 10
/* No child processes */</font></tt><br><tt><font size=2>#define EAGAIN 11
/* Try again */</font></tt><br><tt><font size=2>#define ENOMEM 12
/* Out of memory */</font></tt><br><tt><font size=2>#define EACCES 13
/* Permission denied */</font></tt><br><tt><font size=2>#define EFAULT 14
/* Bad address */</font></tt><br><tt><font size=2>#define ENOTBLK 15
/* Block device required */</font></tt><br><tt><font size=2>#define EBUSY 16
/* Device or resource busy */</font></tt><br><tt><font size=2>#define EEXIST 17
/* File exists */</font></tt><br><tt><font size=2>#define EXDEV 18
/* Cross-device link */</font></tt><br><tt><font size=2>#define ENODEV 19
/* No such device */</font></tt><br><tt><font size=2>#define ENOTDIR 20
/* Not a directory */</font></tt><br><tt><font size=2>#define EISDIR 21
/* Is a directory */</font></tt><br><tt><font size=2>#define EINVAL 22
/* Invalid argument */</font></tt><br><tt><font size=2>#define ENFILE 23
/* File table overflow */</font></tt><br><tt><font size=2>#define EMFILE 24
/* Too many open files */</font></tt><br><tt><font size=2>#define ENOTTY 25
/* Not a typewriter */</font></tt><br><tt><font size=2>#define ETXTBSY 26
/* Text file busy */</font></tt><br><tt><font size=2>#define EFBIG 27
/* File too large */</font></tt><br><tt><font size=2>#define ENOSPC 28
/* No space left on device */</font></tt><br><tt><font size=2>#define ESPIPE 29
/* Illegal seek */</font></tt><br><tt><font size=2>#define EROFS 30
/* Read-only file system */</font></tt><br><tt><font size=2>#define EMLINK 31
/* Too many links */</font></tt><br><tt><font size=2>#define EPIPE 32
/* Broken pipe */</font></tt><br><tt><font size=2>#define EDOM 33
/* Math argument out of domain of func */</font></tt><br><tt><font size=2>#define ERANGE 34
/* Math result not representable */</font></tt><br><br><font size=2 face="sans-serif"><br></font><br><br><img align=left src=cid:_1_0E516CEC0E516AAC0052E7FF85257F71 alt="Marc A Kaplan" style="border:0px solid;"><BR>