Chapter Contents

Previous

Next
fdopen

fdopen



Associate Standard I/O File with a File Descriptor

Portability: POSIX.1 conforming, UNIX compatible


SYNOPSIS
DESCRIPTION
RETURN VALUE
EXAMPLE
RELATED FUNCTIONS
SEE ALSO


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 USS 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


Chapter Contents

Previous

Next

Top of Page

Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.