Developer Guide and Reference

ID 767251
Date 10/31/2024
Public
Document Table of Contents

STAT

Portability Function: Returns detailed information about a file.

Module

USE IFPORT

result = STAT (name,statb)

name

(Input) Character*(*). Name of the file to examine.

statb

(Output) INTEGER(4) or INTEGER(8). One-dimensional array of size 12; where the system information is stored. The elements of statb contain the following values:

Element

Description

Values or Notes

statb(1)

Device the file resides on

Windows: Always 0

Linux: System dependent

statb(2)

File inode number

Windows: Always 0

Linux: System dependent

statb(3)

Access mode of the file

See the table in Results

statb(4)

Number of hard links to the file

Windows: Always 1

Linux: System dependent

statb(5)

User ID of owner

Windows: Always 1

Linux: System dependent

statb(6)

Group ID of owner

Windows: Always 1

Linux: System dependent

statb(7)

Raw device the file resides on

Windows: Always 0

Linux: System dependent

statb(8)

Size of the file

statb(9)

Time when the file was last accessed1

Windows: Only available on non-FAT file systems; undefined on FAT systems

Linux: System dependent

statb(10)

Time when the file was last modified1

statb(11)

Time of last file status change1

Windows: Same as stat(10)

Linux: System dependent

statb(12)

Blocksize for file system I/O operations

Windows: Always 1

Linux: System dependent

1Times are in the same format returned by the TIME function (number of seconds since 00:00:00 Greenwich mean time, January 1, 1970).

Results

The result type is INTEGER(4).

On Windows* systems, the result is zero if the inquiry was successful; otherwise, the error code ENOENT (the specified file could not be found). On Linux* systems, the file inquired about must be currently connected to a logical unit and must already exist when STAT is called; if STAT fails, errnois set.

For a list of other error codes, see IERRNO.

The access mode (the third element of statb) is a bitmap consisting of an IOR of the following constants:

Symbolic name

Constant

Description

Notes

S_IFMT

O'0170000'

Type of file

S_IFDIR

O'0040000'

Directory

S_IFCHR

O'0020000'

Character special

Never set on Windows systems

S_IFBLK

O'0060000'

Block special

Never set on Windows systems

S_IFREG

O'0100000'

Regular

S_IFLNK

O'0120000'

Symbolic link

Never set on Windows systems

S_IFSOCK

O'0140000'

Socket

Never set on Windows systems

S_ISUID

O'0004000'

Set user ID on execution

Never set on Windows systems

S_ISGID

O'0002000'

Set group ID on execution

Never set on Windows systems

S_ISVTX

O'0001000'

Save swapped text

Never set on Windows systems

S_IRWXU

O'0000700'

Owner's file permissions

S_IRUSR, S_IREAD

O'0000400'

Owner's read permission

Always true on Windows systems

S_IWUSR, S_IWRITE

O'0000200'

Owner's write permission

S_IXUSR, S_IEXEC

O'0000100'

Owner's execute permission

Based on file extension (.EXE, .COM, .CMD, or .BAT)

S_IRWXG

O'0000070'

Group's file permissions

Same as S_IRWXU on Windows systems

S_IRGRP

O'0000040'

Group's read permission

Same as S_IRUSR on Windows systems

S_IWGRP

O'0000020'

Group's write permission

Same as S_IWUSR on Windows systems

S_IXGRP

O'0000010'

Group's execute permission

Same as S_IXUSR on Windows systems

S_IRWXO

O'0000007'

Other's file permissions

Same as S_IRWXU on Windows systems

S_IROTH

O'0000004'

Other's read permission

Same as S_IRUSR on Windows systems

S_IWOTH

O'0000002'

Other's write permission

Same as S_IWUSR on Windows systems

S_IXOTH

O'0000001'

Other's execute permission

Same as S_IXUSR on Windows systems

STAT returns the same information as FSTAT, but accesses files by name instead of external unit number.

On Windows* systems, LSTAT returns exactly the same information as STAT. On Linux systems, if the file denoted by name is a link, LSTAT provides information on the link, while STAT provides information on the file at the destination of the link.

You can also use the INQUIRE statement to get information about file properties.

Example

 USE IFPORT
 CHARACTER*12 file_name
 INTEGER(4) info_array(12)
 print *, 'Enter file to examine: '
 read *, file_name
 ISTATUS = STAT (file_name, info_array)
 if (.not. istatus) then
   print *, info_array else
   print *, 'Error = ',istatus
 end if
 end