<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>