fopen(3C)




NAME

     fopen - open a stream


SYNOPSIS

     #include <stdio.h>

     FILE *fopen(const char *filename, const char *mode);


DESCRIPTION

     The fopen() function opens the file whose  pathname  is  the
     string  pointed to by filename, and associates a stream with
     it.

     The argument mode points to a string beginning with  one  of
     the following sequences:

     r or rb
           Open file for reading.

     w or wb
           Truncate to  zero  length or create file for writing.

     a or ab
           Append; open or create file  for  writing  at  end-of-
           file.

     r+ or rb+ or r+b
           Open file for update (reading and writing).

     w+ or wb+ or w+b
           Truncate to zero length or create file for update.

     a+ or ab+ or a+b
           Append; open or create file  for  update,  writing  at
           end-of-file.

     The character b has no effect, but  is  allowed  for  ISO  C
     standard conformance (see standards(5)). Opening a file with
     read mode (r as the first character in  the  mode  argument)
     fails if the file does not exist or cannot be read.

     Opening a file with append mode (a as the first character in
     the  mode argument) causes all subsequent writes to the file
     to be forced to the then current end-of-file, regardless  of
     intervening  calls  to  fseek(3C). If two separate processes
     open the same file for append, each process may write freely
     to  the file without fear of destroying output being written
     by the other.  The output from the  two  processes  will  be
     intermixed in the file in the order in which it is written.

     When a file is opened with update mode (+ as the  second  or
     third character in the mode argument), both input and output
     may be performed on the associated stream.  However,  output
     must  not be directly followed by input without an interven-
     ing call to fflush(3C) or to a file positioning  function  (
     fseek(3C), fsetpos(3C) or rewind(3C)), and input must not be
     directly followed by output without an intervening call to a
     file   positioning  function,  unless  the  input  operation
     encounters end-of-file.

     When opened, a stream is fully buffered if and  only  if  it
     can be determined not to refer to an interactive device. The
     error and end-of-file indicators for the stream are cleared.

     If mode is w, a, w+ or a+ and the file  did  not  previously
     exist,  upon  successful  completion,  fopen() function will
     mark for update the st_atime, st_ctime and  st_mtime  fields
     of  the  file  and  the  st_ctime and st_mtime fields of the
     parent directory.

     If mode is w or w+ and the file did previously  exist,  upon
     successful  completion,  fopen()  will  mark  for update the
     st_ctime and st_mtime fields of the file.  The fopen() func-
     tion will allocate a file descriptor as open(2) does.

     The largest value that can be represented  correctly  in  an
     object  of type off_t will be established as the offset max-
     imum in the open file description.


RETURN VALUES

     Upon successful completion, fopen() returns a pointer to the
     object controlling the stream.  Otherwise, a null pointer is
     returned and errno is set to indicate the error.

     The fopen() function may fail and not set errno if there are
     no free stdio streams.


ERRORS

     The fopen() function will fail if:

     EACCES
           Search permission is denied on a component of the path
           prefix,  or the file exists and the permissions speci-
           fied by mode are denied, or the file  does  not  exist
           and  write  permission is denied for the parent direc-
           tory of the file to be created.

     EINTR A signal was caught during the execution of fopen().

     EISDIR
           The named file is a directory and mode requires  write
           access.

     ELOOP Too many symbolic links were encountered in  resolving
           path.

     EMFILE
           There are OPEN_MAX file descriptors currently open  in
           the calling process.

     ENAMETOOLONG
           The length of the filename exceeds PATH_MAX or a path-
           name component is longer than NAME_MAX.

     ENFILE
           The maximum allowable number  of  files  is  currently
           open in the system.

     ENOENT
           A component of filename does not name an existing file
           or filename is an empty string.

     ENOSPC
           The directory or file system that  would  contain  the
           new  file cannot be expanded, the file does not exist,
           and it was to be created.

     ENOTDIR
           A component of the path prefix is not a directory.

     ENXIO The named file is a character special or block special
           file, and the device associated with this special file
           does not exist.

     EOVERFLOW
           The current value  of  the  file  position  cannot  be
           represented correctly in an object of type fpos_t.

     EROFS The named file resides on a read-only file system  and
           mode requires write access.

     The fopen() function may fail if:

     EINVAL
           The value of the mode argument is not valid.

     EMFILE
           The number of streams currently open  in  the  calling
           process is either FOPEN_MAX or STREAM_MAX.

     ENAMETOOLONG
           Pathname resolution of a  symbolic  link  produced  an
           intermediate result whose length exceeds PATH_MAX.

     ENOMEM
           Insufficient storage space is available.

     ETXTBSY
           The file is a pure procedure (shared text)  file  that
           is being executed and mode requires write access.


USAGE

     The number of streams that a process can have  open  at  one
     time  is  STREAM_MAX.  If  defined, it has the same value as
     FOPEN_MAX.

     The fopen() function has a transitional interface for 64-bit
     file offsets.  See lf64(5).

     When a UFS file system is mounted with logging enabled, file
     system  transactions  that  free blocks from files might not
     actually add those freed blocks to the  file  system's  free
     list  until  some  unspecified  time  in  the  future.  This
     behavior improves file system performance but does not  con-
     form  to the POSIX, Single UNIX Specification, SPARC Confor-
     mance Definition, System  V  Application  Binary  Interface,
     System  V Interface Definition, and X/Open Portability Guide
     Standards, which  require  that  freed  space  be  available
     immediately.  To enable standards conformance regarding file
     deletions or to address the problem of  not  being  able  to
     grow  files  on a relatively full UFS file system even after
     files  have  been  deleted,   disable   UFS   logging   (see
     mount_ufs(1M).


ATTRIBUTES

     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | MT-Level                    | MT-Safe                     |
    |_____________________________|_____________________________|


SEE ALSO

     mount_ufs(1M),    fclose(3C),    fdopen(3C),     fflush(3C),
     freopen(3C),    fsetpos(3C),    rewind(3C),   attributes(5),
     lf64(5), standards(5)


Man(1) output converted with man2html