_fstat, _fstati64

Get information about an open file.

int _fstat( int handle, struct _stat *buffer );

__int64 _fstati64( int handle, struct _stat *buffer );

Function Required Header Compatibility
_fstat <sys/stat.h> and <sys/types.h> Win 95, Win NT
_fstati64 <sys/stat.h> and <sys/types.h> Win 95, Win NT

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version

Return Value

_fstat and _fstati64 return 0 if the file-status information is obtained. A return value of –1 indicates an error, in which case errno is set to EBADF, indicating an invalid file handle.

Parameters

handle

Handle of open file

buffer

Pointer to structure to store results

Remarks

The _fstat function obtains information about the open file associated with handle and stores it in the structure pointed to by buffer. The _stat structure, defined in SYS\STAT.H, contains the following fields:

st_atime

Time of last file access.

st_ctime

Time of creation of file.

st_dev

If a device, handle; otherwise 0.

st_mode

Bit mask for file-mode information. The _S_IFCHR bit is set if handle refers to a device. The _S_IFREG bit is set if handle refers to an ordinary file. The read/write bits are set according to the file’s permission mode. _S_IFCHR and other constants are defined in SYS\STAT.H.

st_mtime

Time of last modification of file.

st_nlink

Always 1 on non-NTFS file systems.

st_rdev

If a device, handle; otherwise 0.

st_size

Size of the file in bytes.

If handle refers to a device, the st_atime, st_ctime, and st_mtime and st_size fields are not meaningful.

Because STAT.H uses the _dev_t type, which is defined in TYPES.H, you must include TYPES.H before STAT.H in your code.

Example

/* FSTAT.C: This program uses _fstat to report
 * the size of a file named F_STAT.OUT.
 */

#include <io.h>
#include <fcntl.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main( void )
{
   struct _stat buf;
   int fh, result;
   char buffer[] = "A line to output";

   if( (fh = _open( "f_stat.out", _O_CREAT | _O_WRONLY |
                                  _O_TRUNC )) ==  -1 )
   _write( fh, buffer, strlen( buffer ) );

   /* Get data associated with "fh": */
   result = _fstat( fh, &buf );

   /* Check if statistics are valid: */
   if( result != 0 )
      printf( "Bad file handle\n" );
   else
   {
      printf( "File size     : %ld\n", buf.st_size );

      printf( "Time modified : %s", ctime( &buf.st_ctime ) );
   }
   _close( fh );
}

Output

File size     : 0
Time modified : Tue Mar 21 15:23:08 1995

File Handling Routines

See Also   _access, _chmod, _filelength, _stat