open

Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services

NAME

       open, creat - open and possibly create a file or device


SYNOPSIS

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

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


DESCRIPTION

       open  attempts to open a file and return a file descriptor
       (a small, non-negative integer for  use  in  read,  write,
       etc.)

       flags is one of O_RDONLY, O_WRONLY or O_RDWR which request
       opening the  file  read-only,  write-only  or  read/write,
       respectively.

       flags  may  also  be  bitwise-or'd with one or more of the
       following:

       O_CREAT
              If the file does not exist it will be created.

       O_EXCL When used with O_CREAT, if the file already  exists
              it  is  an  error and the open will fail.  See BUGS
              below, though.

       O_NOCTTY
              If pathname refers to  a  terminal  device  --  see
              tty(4) -- it will not become the process's control-
              ling terminal even if the  process  does  not  have
              one.

       O_TRUNC
              If the file already exists it will be truncated.

       O_APPEND
              The  file  is opened in append mode. Initially, and
              before each write, the file pointer  is  positioned
              at the end of the file, as if with lseek.

       O_NONBLOCK or O_NDELAY
              The  file  is  opened in non-blocking mode. Neither
              the open nor any subsequent operations on the  file
              descriptor which is returned will cause the calling
              process to wait.

       O_SYNC The file is opened for synchronous I/O. Any  writes
              on  the  resulting  file  descriptor will block the
              calling process until the data has been  physically
              written  to  the  underlying  hardware.   See  BUGS
              below, though.

       Some of these optional flags can be  altered  using  fcntl
       after the file has been opened.

       mode  specifies  the  permissions  to use if a new file is
       created. It is modified by  the  process's  umask  in  the
       usual way: the permissions of the created file are (mode &
       ~umask).

       mode should always be specified when  O_CREAT  is  in  the
       flags, and is ignored otherwise.

       creat   is   equivalent   to  open  with  flags  equal  to
       O_CREAT|O_WRONLY|O_TRUNC.


RETURN VALUE

       open and creat return the new file descriptor, or -1 if an
       error  occurred  (in  which  case,  errno is set appropri-
       ately).


ERRORS

       EEXIST pathname already exists and O_CREAT and O_EXCL were
              used.

       EISDIR pathname  refers  to  a  directory  and  the access
              requested involved writing.

       ETXTBSY
              pathname refers to an  executable  image  which  is
              currently  being  executed  and  write  access  was
              requested..

       EFAULT pathname points  outside  your  accessible  address
              space.

       EACCES The requested access to the file is not allowed, or
              one of the directories in pathname  did  not  allow
              search (execute) permission.

       ENAMETOOLONG
              pathname was too long.

       ENOENT A directory component in pathname does not exist or
              is a dangling symbolic link.

       ENOTDIR
              A component used as a directory in pathname is not,
              in fact, a directory.

       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.

       ENOMEM Insufficient kernel memory was available.

       EROFS  pathname refers to a file on a read-only filesystem
              and write access was requested.

       ELOOP  pathname contains a reference to  a  circular  sym-
              bolic link, ie a symbolic link whose expansion con-
              tains a reference to itself.

       ENOSPC pathname was to be created but the device  contain-
              ing pathname has no room for the new file.


CONFORMING TO

       SVID, AT&T, POSIX, X/OPEN, BSD 4.3


BUGS

       O_SYNC is not currently implemented (as of Linux 0.99pl7).

       There are many infelicities  in  the  protocol  underlying
       NFS,   affecting  amongst  others  O_SYNC,  O_NDELAY,  and
       O_APPEND.

       O_EXCL is broken on NFS file systems, programs which  rely
       on  it  for  performing  locking tasks will contain a race
       condition.  The solution for performing atomic file  lock-
       ing  using  a  lockfile  is to create a unique file on the
       same  fs  (e.g.,  incorporating  hostname  and  pid),  use
       link(2)  to make a link to the lockfile and use stat(2) on
       the unique file to check if its link count  has  increased
       to 2.  Do not use the return value of the link() call.



SEE ALSO

       read(2),    write(2),   fcntl(2),   close(2),   unlink(2),
       mknod(2),   stat(2),   umask(2),   mount(2),    socket(2),
       socket(2), fopen(3), link(2).
Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services
Copyright (C) 1998 Hurricane Electric. All Rights Reserved.