Get status information on a file.
int _stat( const char *path, struct _stat *buffer );
__int64 _stati64( const char *path, struct _stat *buffer );
int _wstat( const wchar_t *path, struct _stat *buffer );
__int64 _wstati64( const wchar_t *path, struct _stat *buffer );
Routine | Required Header | Optional Headers | Compatibility |
_stat | <sys/types.h> followed by <sys/stat.h> | <errno.h> | Win 95, Win NT |
_wstat | <sys/types.h> followed by <sys/stat.h> or <wchar.h> | <errno.h> | Win NT |
_stati64 | <sys/types.h> followed by <sys/stat.h> | <errno.h> | Win 95, Win NT |
_wstati64 | <sys/types.h> followed by <sys/stat.h> or <wchar.h> | <errno.h> | 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
Each of these functions returns 0 if the file-status information is obtained. A return value of –1 indicates an error, in which case errno is set to ENOENT, indicating that the filename or path could not be found.
Parameters
path
Path of existing file
buffer
Pointer to structure that stores results
Remarks
The _stat function obtains information about the file or directory specified by path and stores it in the structure pointed to by buffer. _stat automatically handles multibyte-character string arguments as appropriate, recognizing multibyte-character sequences according to the multibyte code page currently in use.
_wstat is a wide-character version of _stat; the path argument to _wstat is a wide-character string. _wstat and _stat behave identically except that _wstat does not handle multibyte-character strings.
Generic-Text Routine Mappings
TCHAR.H Routine | _UNICODE & _MBCS Not Defined | _MBCS Defined | _UNICODE Defined |
_tstat | _stat | _stat | _wstat |
_tstati64 | _stati64 | _stati64 | _wstati64 |
The _stat structure, defined in SYS/STAT.H, includes the following fields.
st_gid
Numeric identifier of group that owns file (UNIX-specific) This field will always be zero on NT systems. A redirected file is classified as an NT file.
st_atime
Time of last access of file.
st_ctime
Time of creation of file.
st_dev
Drive number of the disk containing the file (same as st_rdev).
st_ino
Number of the information node (the inode) for the file (UNIX-specific). On UNIX file systems, the inode describes the file date and time stamps, permissions, and content. When files are hard-linked to one another, they share the same inode. The inode, and therefore st_ino, has no meaning in the FAT, HPFS, or NTFS file systems.
st_mode
Bit mask for file-mode information. The _S_IFDIR bit is set if path specifies a directory; the _S_IFREG bit is set if path specifies an ordinary file or a device. User read/write bits are set according to the file’s permission mode; user execute bits are set according to the filename extension.
st_mtime
Time of last modification of file.
st_nlink
Always 1 on non-NTFS file systems.
st_rdev
Drive number of the disk containing the file (same as st_dev).
st_size
Size of the file in bytes; a 64-bit integer for _stati64 and _wstati64
st_uid
Numeric identifier of user who owns file (UNIX-specific). This field will always be zero on NT systems. A redirected file is classified as an NT file.
If path refers to a device, the size, time, _dev, and _rdev fields in the _stat structure are meaningless. Because STAT.H uses the _dev_t type that is defined in TYPES.H, you must include TYPES.H before STAT.H in your code.
Example
/* STAT.C: This program uses the _stat function to
* report information about the file named STAT.C.
*/
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
void main( void )
{
struct _stat buf;
int result;
char buffer[] = "A line to output";
/* Get data associated with "stat.c": */
result = _stat( "stat.c", &buf );
/* Check if statistics are valid: */
if( result != 0 )
perror( "Problem getting information" );
else
{
/* Output some of the statistics: */
printf( "File size : %ld/n", buf.st_size );
printf( "Drive : %c:/n", buf.st_dev + 'A' );
printf( "Time modified : %s", ctime( &buf.st_atime ) );
}
}
Output
File size : 745
Drive : C:
Time modified : Tue May 03 00:00:00 1994