stat
Gražina 13 elementų sarašą, teikiantį būsenos informaciją apie failą arba failą, atidarytą per FILEHANDLE, ar įvardintą EXPR. Jei EXPR praleistas, suformuluoja $_ . Gražina tuščią sarašą, jei nepavyksta stat. Dažniausiai naudojamas taip:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
Ne visi laukai palaikomi visose failų sistemose. Štai laukų reikšmės:
0 dev device number of filesystem
1 ino inode numeris
2 mode failo režimas (modas) (tipas ir leidimai)
3 nlink nuorodų (hard links) į failą skaičius
4 uid skaitinis vartotojo ID, kuris yra failo savininkasnumeric user ID of file's owner
5 gid skaitinis grupės, kuriai priklauso failas ID
6 rdev Įtaiso identifikatorius (tik specialiems failams)
7 size Viso failo dydis, baitais
8 atime paskutinį kart kada buvo kreiptas į failą. Laikas sekundėmis nuo epochos
9 mtime paskutinį kartą kada buvo modifikuotas failas. Laikas sekundėmis nuo epochos
10 ctime inode pakeitimo laikas sekundėmis nuo epochos(*)
11 blksize pageidaujamas bloko dydis failų sistemos I/O
12 blocks faktinis išskirtų blokų skaičius
(Epocha buvo 00:00 Sausio 1, 1970 GMT.)
(*) Ne visi laukai palaikomi visų failų sistemų. Pažymėtina, kad ctime laukas nėra portatyvus. Žodžiu, tikėtis kad tai bus "sukūrimo laikas", negalima, reikėtų atkreipti dėmesį į "Files and Filesystems" perlport dėl daugiau detalių.
Jei stat perduodamas specialus filehandle'as, susidedantis iš pabraukimo, stat nedaromas, bet dabartinis stat struktūros turinys iš po paskutiniųjų stat, lstat, ar filetest gražinami. Pavyzdys:
if (-x $file && (($d) = stat(_)) && $d < 0) {
print "$file is executable NFS file\n";
}
(Šis pavyzdys veikia tik kur įrenginių numeriai yra neigiami po NFS.)
Kadangi mode nurodyti ir failo tipas ir leidimai, reikėtų užmaskint failo tipą ir (s)printf'int naudojant "%o", jei norima pamatyti realius leidimus.
$mode = (stat($filename))[2];
printf "Permissions are %04o\n", $mode & 07777;
Skaliariniame kontekste, stat gražina būlinę reikšmę, parodydamas sėkę arba ne, sėkmingo kreipimosi metu, įrašo informaciją, susijusią su specialiu failo filehandle'u _ .
File::stat modulis suteikia patogų, prieigos pagal vardą mechanizmą:
use File::stat;
$sb = stat($filename);
printf "File is %s, size is %s, perm %04o, mtime %s\n",
$filename, $sb->size, $sb->mode & 07777,
scalar localtime $sb->mtime;
Galima importuoti simbolines režimo konstantas (S_IF* ) ir funkcijas(S_IS* ) iš Fcntl modulio:
use Fcntl ':mode';
$mode = (stat($filename))[2];
$user_rwx = ($mode & S_IRWXU) >> 6;
$group_read = ($mode & S_IRGRP) >> 3;
$other_execute = $mode & S_IXOTH;
printf "Permissions are %04o\n", S_IMODE($mode), "\n";
$is_setuid = $mode & S_ISUID;
$is_setgid = S_ISDIR($mode);
Paskutinius du galima parašyti naudojant -u ir -d operatorius. Paprastai galimos S_IF* konstantos yra
# Leidimai: read, write, execute, for user, group, others.
S_IRWXU S_IRUSR S_IWUSR S_IXUSR
S_IRWXG S_IRGRP S_IWGRP S_IXGRP
S_IRWXO S_IROTH S_IWOTH S_IXOTH
# Setuid/Setgid/Stickiness/SaveText.
# Pažymėtina, kad tiksli prasmės priklauso nuo sistemos.
S_ISUID S_ISGID S_ISVTX S_ISTXT
# Failų tipai. Nebūtinai visi galimi ant naudojamos sistemos.
S_IFREG S_IFDIR S_IFLNK S_IFBLK S_ISCHR S_IFIFO S_IFSOCK S_IFWHT S_ENFMT
# Sekantys yra suderinami su S_IRUSR, S_IWUSR, S_IXUSR.
S_IREAD S_IWRITE S_IEXEC
, o S_IF* funkcijos yra
S_IMODE($mode) dalis $mode susideda iš leidimų bitų ir setuid/setgid/sticky bitų
S_IFMT($mode) dalis $mode susideda iš failų tipų, kurie gali būti paveikti būlio algebros "ir" ir bitų operacijos pvz. S_IFREG
ar su sekančiomis funkcijomis
# operatoriai -f, -d, -l, -b, -c, -p ir -S.
S_ISREG($mode) S_ISDIR($mode) S_ISLNK($mode)
S_ISBLK($mode) S_ISCHR($mode) S_ISFIFO($mode) S_ISSOCK($mode)
# Jokio tiesioginio -X operatoriaus analogas, bet pirmajam
# -g operatorius dažnai tolygus. ENFMT reiškia
# įrašų grupės reikalavimą (record flocking enforcement), priklausoma nuo platformos ypatybė.
S_ISENFMT($mode) S_ISWHT($mode)
Verta pažiūrėti nuosavų chmod(2) ir stat(2) dokumentaciją dėl smulkesnių detalių apie S_* konstantas. Gauti statuso informaciją apie simbolinę nuorodą vietoj failo, į kurį nurodoma, reiktų naudoti lstat funkciją.