RAD Studio
ContentsIndex
PreviousUpNext
fstat, stat, _wstat

Header File 

sys\stat.h  

Category 

Input/output Routines 

Prototype 

int fstat(int handle, struct stat *statbuf); 

int stat(const char *path, struct stat *statbuf); 

int _wstat(const wchar_t *path, struct stat *statbuf); 

Description 

Gets open file information. 

fstat stores information in the stat structure about the file or directory associated with handle. 

stat stores information about a given file or directory in the stat structure. The name of the file is path. 

statbuf points to the stat structure (defined in sys\stat.h). That structure contains the following fields:

st_mode 
Bit mask giving information about the file's mode 
st_dev 
Drive number of disk containing the file or file handle if the file is on a device 
st_rdev 
Same as st_dev 
st_nlink 
Set to the integer constant 1 
st_size 
Size of the file in bytes 
st_atime 
Most recent access (Windows) or last time modified (DOS) 
st_mtime 
Same as st_atime 
st_ctime 
Same as st_atime 

The stat structure contains three more fields not mentioned here. They contain values that are meaningful only in UNIX. 

The st_mode bit mask that gives information about the mode of the open file includes the following bits: 

One of the following bits will be set:

S_IFCHR 
If handle refers to a device. 
S_IFREG  
If an ordinary file is referred to by handle. 

One or both of the following bits will be set:

S_IWRITE 
If user has permission to write to file. 
S_IREAD 
If user has permission to read to file. 

The HPFS and NTFS file-management systems make the following distinctions:

st_atime 
Most recent access 
st_mtime 
Most recent modify 
st_ctime 
Creation time 

Return Value 

fstat and stat return 0 if they successfully retrieved the information about the open file.  

On error (failure to get the information) these functions return -1 and set the global variable errno to

EBADF 
Bad file handle 

Example

#include <sys\stat.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
   struct stat statbuf;
   FILE *stream;
   /* open a file for update */
   if ((stream = fopen("DUMMY.FIL", "w+")) 
       == NULL)
   {
      fprintf(stderr, "Cannot open output file.\n");
      return(1);
   }
   fprintf(stream, "This is a test");
   fflush(stream);
   /* get information about the file */
   fstat(fileno(stream), &statbuf);
   fclose(stream);
   /* display the information returned */
   if (statbuf.st_mode & S_IFCHR)
      printf("Handle refers to a device.\n");
   if (statbuf.st_mode & S_IFREG)
      printf("Handle refers to an ordinary file.\n");
   if (statbuf.st_mode & S_IREAD)
      printf("User has read permission on file.\n");
   if (statbuf.st_mode & S_IWRITE)
      printf("User has write permission on file.\n");
   printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
   printf("Size of file in bytes: %ld\n", statbuf.st_size);
   printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));
   return 0;
}
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!