Portability Function: Returns detailed information about a file specified by a external unit number.
Module: USE IFPORT
Syntax
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*32, W*64: Always 0 L*X: System dependent |
statb(2) | File inode number | W*32, W*64: 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*32, W*64: Always 1 L*X: System dependent |
statb(5) | User ID of owner | W*32, W*64: Always 1 L*X: System dependent |
statb(6) | Group ID of owner | W*32, W*64: Always 1 L*X: System dependent |
statb(7) | Raw device the file resides on | W*32, W*64: Always 0 L*X: System dependent |
statb(8) | Size of the file | |
statb(9) | Time when the file was last accessed1 | W*32, W*64: 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*32, W*64: Same as stat(10) L*X: System dependent |
statb(12) | Blocksize for file system I/O operations | W*32, W*64: Always 1 L*X: System dependent |
1 Times 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.
Compatibility
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
See Also
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