| 
                  UNIX Input/Output
                   Universal File I/O  | 
            
| 
                   
                      
                     Prof. David Bernstein
                       | 
            
| Computer Science Department | 
| bernstdh@jmu.edu | 
               
            
         
            
         
         
            
         
         
            
         int open(char *pathname, int flags, mode_t mode);
               
                        pathname
                      | 
                     The path to the file | 
                        flags
                      | 
                     A bit mask specifying how the file will be accessed | 
                        mode
                      | 
                     An optional (except when creating) access permission | 
| Return | A file descriptor (or -1 if an error occurs) | 
flags
         
         
            
         
                           O_RDONLY
                         | 
                        Read only | 
                           O_WRONLY
                         | 
                        Write only | 
                           O_RDWR
                         | 
                        Read and write | 
                           O_CREAT
                         | 
                        Create the file if it doesn't exist | 
                           O_APPEND
                         | 
                        Writes are always appended to the end of the file | 
errno
         
         
            
         
                           EACCES
                         | 
                        The file permissions don't allow the mode specified by flags | 
                           EISDIR
                         | 
                        Attempted to open a directory for writing | 
                           EMFILE
                         | 
                        Too many open files (for the process) | 
                           ENFILE
                         | 
                        Too many open files (for the system) | 
errno
         
         
            
         
                           EBADF
                         | 
                        
                           fd isn't a valid open file descriptor | 
                     
                           EIO
                         | 
                        An I/O error occurred | 
         
            
         ssize_t read(int fd, void *buffer, size_t count)
               
                        fd
                      | 
                     The file descriptor to read from | 
                        buffer
                      | 
                     The ultimate location of the bytes in memory | 
                        count
                      | 
                     The maximum number of bytes to copy | 
| Return | The number of bytes copied; 0 on EOF; -1 on error | 
         
            
         count bytes longerrno
         
         
            
         
                           EBADF
                         | 
                        
                           fd is invalid or not open for reading | 
                     
                           EIO
                         | 
                        I/O error | 
                           EISDIR
                         | 
                        
                           fd refers to a directory | 
                     
errno
         
         
            
         
                           EBADF
                         | 
                        
                           fd is invalid or not open for reading | 
                     
                           EDQUOT
                         | 
                        The user's disk quota has been exhausted | 
                           EIO
                         | 
                        I/O error | 
                           ENOSPC
                         | 
                        The device has no room for the data |