COHERENT manpages

This page displays the COHERENT manpage for fopen() [Open a stream for standard I/O].

List of available manpages
Index


fopen() -- STDIO Function (libc)

Open a stream for standard I/O
#include <stdio.h>
FILE *fopen (name, type)
char *name, *type;

fopen() allocates  and initializes  a FILE  structure, or stream;  opens or
creates the  file name; and returns  a pointer to the  structure for use by
other STDIO routines.  name refers to the file to be opened.

type is a string that consists of one or more of the characters ``rwa'', to
indicate the mode of the string, as follows:

    r   Read; error if file not found
    w   Write; truncate if found, create if not found

    a   Append to end of file; no truncation, create if not found
    r+  Read and write; no truncation, error if not found

    w+  Write and read; truncate if found, create if not found
    a+  Append and read; no truncation, create if not found

The modes that contain `a' set  the seek pointer to point at the end of the
file; all other modes set it  to point at the beginning of the file.  Modes
that contain `+' both read and write; however, a program must call fseek or
rewind before it switches from reading to writing or vice versa.


Example

This  example   copies  argv[1]  to  argv[2]   using  STDIO  routines.   It
demonstrates  the  functions  fopen(),  fread(),  fwrite(),  fclose(),  and
feof().

#include <stdio.h>
#include <stdlib.h>
/* BUFSIZ is defined in stdio.h */
char buf[BUFSIZ];

void fatal(message)
char *message;
{
    fprintf(stderr, "copy: %s\n", message);
    exit(1);
}

main(argc, argv)
int argc; char *argv[];
{
    register FILE *ifp, *ofp;
    register unsigned int n;

    if (argc != 3)
        fatal("Usage: copy source destination");
    if ((ifp = fopen(argv[1], "r")) == NULL)
        fatal("cannot open input file");
    if ((ofp = fopen(argv[2], "w")) == NULL)
        fatal("cannot open output file");

    while ((n = fread(buf, 1, BUFSIZ, ifp)) != 0) {
        if (fwrite(buf, 1, n, ofp) != n)
            fatal("write error");
    }

    if (!feof(ifp))
        fatal("read error");
    if (fclose(ifp) == EOF || fclose(ofp) == EOF)
        fatal("cannot close");
    exit(0);
}

See Also

fclose(),
fdopen(),
freopen(),
libc
ANSI Standard, §7.9.5.3
POSIX Standard, §8.1

Diagnostics

fopen() returns  NULL if it cannot  allocate a FILE structure,  if the type
string is nonsense, or if the call to open() or creat() fails.

The header file stdio.h defines the manifest constant FOPEN_MAX, which sets
the maximum  number of FILE  structures that you can  allocate per program,
including stdin,  stdout, and stderr. For release 4.2,  FOPEN_MAX is set to
60.

Notes

Many operating systems recognize a  `b' modifier to the type argument; this
indicates that the file contains binary information, and lets the operating
system handle ``funny characters'' correctly.  COHERENT has no need of such
a  modifier, so  if  you append  `b'  to type,  it will  be ignored.   This
modifier,  however,  is recognized  by  numerous  other operating  systems,
including MS-DOS,  OS/2, and GEMDOS.  If you expect  to port developed code
to any of these operating systems, files should append the `b' to type.