[LCP]How to tell if a file is open?
    Roberto Diaz 
    rdiazmartin at vivaldi.dhis.org
       
    Sat Sep  1 02:22:18 UTC 2001
    
    
  
> I'm writing a routine that need to check if the stream it is writing to is open
> before it writes to it.  for example,
> before I try to write and error messge to stdout, I want to make sure it is
> still open.  How can I do this?  All the
> file status functions I've come across require an open file.
> (I remember reading how to somewhere but I can't remember where.)
What is very likely that you remember are this macros at fstat(2)
 S_ISLNK(m)  is it a symbolic link?
              S_ISREG(m)  regular file?
              S_ISDIR(m)  directory?
              S_ISCHR(m)  character device?
              S_ISBLK(m)  block device?
              S_ISFIFO(m) fifo?
              S_ISSOCK(m) socket?
But to make sure if a file descriptor is a real file descritor what you
could to do is to make some operation on it and check if errno is set to
EBADF, something like this can make the trick:
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
inline int
isfildes (int fd)
{
  if (fcntl (fd, F_GETFL) < 0 && errno == EBADF)
    return 0;
  return 1;
}
---
Roberto Diaz <rdiazmartin at vivaldi.dhis.org>
..For a Brave GNU World..    
                                        Concerto Grosso Op. 3/8 A minor
                        Antonio Vivaldi (so... do you need beautiful words?)
                                                                      -----
    
    
More information about the linuxCprogramming
mailing list