##### open

Synopsis:

                int open(const char *pathname, int flags);
                int open(const char *pathname, int flags, mode_t mode);

Request:
  ‘`Fopen,pathptr/len,flags,mode`’

  flags is the bitwise `OR` of the following values:

  `O_CREAT`
    If the file does not exist it will be created. The host rules apply as far as file ownership and time stamps are concerned.
  `O_EXCL`
    When used with `O_CREAT`, if the file already exists it is an error and open() fails.
  `O_TRUNC`
    If the file already exists and the open mode allows writing (`O_RDWR` or `O_WRONLY` is given) it will be truncated to zero length.
  `O_APPEND`
    The file is opened in append mode.
  `O_RDONLY`
    The file is opened for reading only.
  `O_WRONLY`
    The file is opened for writing only.
  `O_RDWR`
    The file is opened for reading and writing.

  Other bits are silently ignored.

  mode is the bitwise `OR` of the following values:

  `S_IRUSR`
    User has read permission.
  `S_IWUSR`
    User has write permission.
  `S_IRGRP`
    Group has read permission.
  `S_IWGRP`
    Group has write permission.
  `S_IROTH`
    Others have read permission.
  `S_IWOTH`
    Others have write permission.

  Other bits are silently ignored.

Return value:
  `open` returns the new file descriptor or -1 if an error occurred.
Errors:
  `EEXIST`
    pathname already exists and `O_CREAT` and `O_EXCL` were used.
  `EISDIR`
    pathname refers to a directory.
  `EACCES`
    The requested access is not allowed.
  `ENAMETOOLONG`
    pathname was too long.
  `ENOENT`
    A directory component in pathname does not exist.
  `ENODEV`
    pathname refers to a device, pipe, named pipe or socket.
  `EROFS`
    pathname refers to a file on a read-only filesystem and write access was requested.
  `EFAULT`
    pathname is an invalid pointer value.
  `ENOSPC`
    No space on device to create the file.
  `EMFILE`
    The process already has the maximum number of files open.
  `ENFILE`
    The limit on the total number of files open on the system has been reached.
  `EINTR`
    The call was interrupted by the user.