fdopen -- Associate Standard I/O File with a File Descriptor

SYNOPSIS

 #include <lcio.h>

 FILE *fdopen(int fileDescriptor, const char *options)
 
The synopsis for the POSIX implementation is
 #include <stdio.h>

 FILE *fdopen(int fileDescriptor, const char *options)
 

DESCRIPTION

fdopen associates an open OpenEdition file descriptor with a pointer to a FILE structure enabling access to the file using standard I/O. This pointer enables you to control buffering and to format input and output.

fdopen accepts the following options. These specified options must not conflict with the current mode of the file descriptor:

r or rb
Open for reading
w or wb
Open for writing
a or ab
Open for appending
r+
Open for update
w+
Open for update
a+
Open for update at end of file

If the options string includes a "b," the "b" is ignored. The file position indicator of the new pointer is the file offset of the file descriptor. fdopen clears the error indicator and the end-of-file indicator for the pointer. When the file pointer is closed, the file descriptor is also closed.

fdopen can also permit access to an open socket through a standard C FILE pointer.

RETURN VALUE

fdopen returns a FILE pointer to the control block for the new pointer. fdopen returns NULL if not successful.

EXAMPLE

This example uses fdopen to open an HFS file for standard I/O, only if the file already exists. This option is specified by the O_EXCL option bit for open, but there is no equivalent fopen functionality.
     /* This example must be compiled with the posix compiler option. */
  #include <stdio.h>
  #include <sys/types.h>
  #include <unistd.h>
  #include <fcntl.h>

  FILE *fopen_excl(char *pathname, char *openmode) {
     int open_opts = O_TRUNC | O_CREAT | O_EXCL;
     int fd;
     FILE *fileptr;

        /* Turn the fopen style openmode into open bits. */
        /*  We assume openmode is a valid open mode.     */
     if (openmode[0] == 'a') open_opts |= O_APPEND;
     if (strchr(openmode, '+')) open_opts |= O_RDWR;
     else open_opts |= O_WRONLY;
     fd = open(pathname, open_opts, S_IRUSR | S_IWUSR |
                                    S_IRGRP | S_IWGRP |
                                    S_IROTH | S_IWOTH);
     if (fd < 0) {          /* if the file wouldn't open */
        perror("open error");
        return NULL;
     }

         /* Make a FILE ptr for the fd.                  */
     fileptr = fdopen(fd, openmode);
     if (!fileptr) {
        perror("fdopen error");
        close(fd);
        return NULL;
     }
     return fileptr;
  }

 

RELATED FUNCTIONS

fopen, open

SEE ALSO


Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.