# FSTAT

Portability Function: Returns detailed information about a file specified by a external unit number.

## Module

USE IFPORT

result = FSTAT (lunit,statb)

lunit | (Input) INTEGER(4). External unit number 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 | W*S: Always 0 L*X: System dependent
statb(2) | File inode number | W*S: Always 0 L*X: System dependent
statb(3) | Access mode of the file | See the table in Results
statb(4) | Number of hard links to the file | W*S: Always 1 L*X: System dependent
statb(5) | User ID of owner | W*S: Always 1 L*X: System dependent
statb(6) | Group ID of owner | W*S: Always 1 L*X: System dependent
statb(7) | Raw device the file resides on | W*S: Always 0 L*X: System dependent
statb(8) | Size of the file |
statb(9) | Time when the file was last accessed1 | W*S: Only available on non-FAT file systems; undefined on FAT systems L*X: System dependent
statb(10) | Time when the file was last modified1 |
statb(11) | Time of last file status change1 | W*S: Same as stat(10) L*X: System dependent
statb(12) | Blocksize for file system I/O operations | W*S: Always 1 L*X: 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). The result is zero if successful; otherwise, returns an error code equal to EINVAL (lunit is not a valid unit number, or is not open).

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.

## Example

    USE IFPORT
    integer(4) statarray(12), istat
    OPEN (unit=1,file='datfile.dat')
    ISTAT = FSTAT (1, statarray)
    if (.NOT. istat) then
        print *, statarray
    end if

Parent topic: E to F

## See Also

INQUIRE
STAT