STAT(2) Systeem Aanroepen STAT(2)
stat, fstat, lstat - krijg bestand status.
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *bestand_naam, struct stat *buf);
int fstat(int bestand_ind, struct stat *buf);
int lstat(const char *bestand_naam, struct stat *buf);
Deze functies geven informatie over het opgegeven bestand. Je hebt geen
toegangs-rechten tot het bestand nodig om deze informatie te krijgen,
maar je moet de zoek-rechten van alle directories hebben, genoemd in de
pad leidend naar het bestand.
stat geeft de status van het bestand waar file_name naar wijst, en vult
buf in.
lstat is gelijk aan stat, maar de status van de koppeling {"link"} zelf
wordt genomen, niet het bestand dat verkregen wordt door de koppelingen
te volgen.
fstat is gelijk aan stat, maar het open bestand waar bestand_ind naar
wijst (zoals teruggegeven door open(2)) wordt genomen in plaats van
bestand_naam.
Ze geven allemaal een stat structuur, welke de volgende velden bevat:
struct stat
{
dev_t st_dev; /* {apparaat} apparaat */
ino_t st_ino; /* {i node} "inode" */
mode_t st_mode; /* {toestand} bescherming */
nlink_t st_nlink; /* {n koppeling} aantal harde
* * koppelingen */
uid_t st_uid; /* {uid} gebruiker ID van eigenaar
* */
gid_t st_gid; /* {gid} groep ID van eigenaar */
dev_t st_rdev; /* {r aparaat} aparaat soort (als
* * "inode" aparaat) */
off_t st_size; /* {maat} hele grootte, in bytes */
unsigned long st_blksize; /* {blok maat} blokgrootte voor
* * bestandsysteem In/Uit */
unsigned long st_blocks; /* {blokken} aantal blokken
* * toegewezen */
time_t st_atime; /* {toegangs tijd} tijd van de
* * laatste toegang */
time_t st_mtime; /* {aanpas tijd} tijd van de
* * laatste aanpassing */
time_t st_ctime; /* {verander tijd} tijd van de
* * laatste verandering */
};
De waarde st_blocks geeft de grootte van het bestand in 512-byte
blokken. De waarde st_blksize geeft de "voorkeur" blokmaat voor voort-
varende bestand systeem In/Uit. (Schrijven naar een bestand in
kleinere brokken kan een niet-voortvarende lees-verander-herschrijf
veroorzaken.)
Niet alle Linux bestandsystemen verwezijnlijken alle tijd-velden. Tra-
ditioneel wordt st_atime {*toegangs*} veranderd door mknod(2) {maak
node}, utime(2) {je tijd}, read(2) {lees}, write(2) {schrijf}, en trun-
cate(2) {afhakken}.
Traditioneel wordt st_mtime {*aanpassings*} veranderd door mknod(2)
{maak node}, utime(2) {je tijd} , and write(2) {schrijf}. De st_mtime
{*aanpassings*} wordt niet veranderd voor veranderingen van eigenaar,
groep, harde koppeling aantal, of toestand {"mode"}.
Traditioneel wordt st_ctime {*verander*} veranderd door schrijven of
door het 'zetten' van "inode" informatie (o.a., eigenaar, groep, kop-
pelingen aantal, toestand, enz.)
De volgende POSIX macros zijn bepaald om het bestand soort te testen:
S_ISLNK(m) {is koppeling} is het een symbolische koppeling?
S_ISREG(m) {is normaal} normaal bestand?
S_ISDIR(m) {is dir} directorie?
S_ISCHR(m) {is karakter} karakter aparaat?
S_ISBLK(m) {is blok} blok aparaat?
S_ISFIFO(m) {is eerst-in-eerst-uit} "fifo"?
S_ISSOCK(m) {is socket} socket? {"socket"}
De volgende vlaggen worden bepaald voor het st_mode {toestand} veld:
S_IFMT 0170000 bitmasker voor de bestandsoort bitvelden
S_IFSOCK 0140000 socket {"socket"}
S_IFLNK 0120000 {bestand verbind} symbolische koppeling
S_IFREG 0100000 {best. normaal} normaal bestand
S_IFBLK 0060000 {best. blok} blok aparaat
S_IFDIR 0040000 {best. dir} dir
S_IFCHR 0020000 {best. karakter} karakter aparaat
S_IFIFO 0010000 {eerst-in-eerst-uit} "fifo"
S_ISUID 0004000 {zet gebruiker id} zet gebruiker ID bit
S_ISGID 0002000 {zet groep id} zet groep ID bit (zie onder)
S_ISVTX 0001000 {zet plakkerig} zet sticky bit (zie onder)
S_IRWXU 00700 {lees schrijf voer-uit gebruiker} masker voor bestand eigenaar toestemmingen
S_IRUSR 00400 {lees gebruiker} eigenaar heeft lees toestemming
S_IWUSR 00200 {schrijf gebruiker} eigenaar heeft schrijf toestemming
S_IXUSR 00100 {voer-uit gebruiker} eigenaar heeft uitvoer toestemming
S_IRWXG 00070 {lees schrijf voer-uit groep} masker voor groep toestemmingen
S_IRGRP 00040 {lees groep} groep heeft lees toestemming
S_IWGRP 00020 {schrijf groep} groep heeft schrijf toestemming
S_IXGRP 00010 {voer-uit groep} groep heeft uitvoer toestemming
S_IRWXO 00007 {lees schrijf voer-uit anderen} masker voor toestemmingen voor anderen (niet in groep)
S_IROTH 00004 {lees anderen} anderen hebben lees toestemming
S_IWOTH 00002 {schrijf anderen} anderen hebben schrijf toestemming
S_IXOTH 00001 {voer-uit anderen} anderen hebben uitvoer toestemming
Het zet GID bit (S_ISGID) heeft verschillende toegewijde toepassingen:
Voor een dir geeft het aan dat BSD regels moeten worden gebruikt voor
die dir: bestanden daar gemaakt erven hun groep ID van de dir, niet van
het geldende gid van het makende proces, en directories daar gemaakt
zullen het S_ISGID bit ook gezet hebben. Voor een bestand dat niet het
groep uitvoer bit (S_IXGRP) aan heeft staan betekend het verplicht
bestand/"record" vergrendelen.
Het `sticky' bit (S_ISVTX) op een dir betekend dat een bestand in die
dir alleen hernoemd of geschrapt kan worden door de eigenaar van het
bestand, door de eigenaar van de dir, en door "root" {root}.
Bij success wordt nul teruggegeven. Bij falen wordt -1 teruggegeven en
wordt errno naar behoren gezet.
EBADF {slechte bi.} bestand_bes is slecht.
ENOENT {geen ingang} Een deel van de weg bestand_naam bestaat niet, of
de pad is een leeg string.
ENOTDIR
{geen dir} Een deel van de pad is geen dir.
ELOOP {cirkel} Teveel symbolische koppelingen werden tegengekomen bij
het afdalen van de weg.
EFAULT {fout} Slecht adres.
EACCES {toegang} Toegang geweigerd.
ENOMEM {geen geheugen} Geheugen is op (kernel geheugen).
ENAMETOOLONG
{naam te lang} Bestand naam te lang.
De stat en fstat aanroepen voldoen aan SVr4, SVID, POSIX, X/OPEN, BSD
4.3. de lstat aanroep voldoet aan 4.3BSD en SVr4. SVr4 beschrijft
aanvullende fstat fouttoestanden EINTR, ENOLINK, en EOVERFLOW. SVr4
beschrijft aanvullende stat en lstat fouttoestanden EACCES, EINTR,
EMULTIHOP, ENOLINK, en EOVERFLOW. Gebruik van de st_blocks en st_blk-
size velden zou minder overdraagbaar kunnen zijn. (Ze werden bedacht in
BSD. Worden niet opgegeven door POSIX. De uitleg verschild tussen sys-
temen, en mogelijk binnen een systeem als NFS mountingen {"mounts"} een
rol spelen.)
POSIX beschrijft de S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK,
S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX bits niet, maar vereist in plaats
daarvan het gebruik van de macro's S_ISDIR(), enz. Unix V7 (en latere
systemen) hadden S_IREAD, S_IWRITE, S_IEXEC, waar POSIX de synoniemen
S_IRUSR, S_IWUSR, S_IXUSR voorschrijft.
Waardes die in gebruikt waren (of zijn) op verschillende systemen:
hex naam ls octaal beschrijving
f000 S_IFMT 170000 masker voor bestand soort
0000 000000 SCO buiten-gebruik "inode", BSD onbekende soort
SVID-v2 en XPG2 hebben allebei 0 en 0100000 voor
normale bestand
1000 S_IFIFO p| 010000 "fifo" (pijp met naam)
2000 S_IFCHR c 020000 karakter speciaal (V7)
3000 S_IFMPC 030000 vermeervoudigd karakter speciaal (V7)
4000 S_IFDIR d/ 040000 dir (V7)
5000 S_IFNAM 050000 XENIX benoemd speciaal bestand
met twee sub-soorten, zich onderscheidend door
st_rdev waardes 1,2:
0001 S_INSEM s 000001 XENIX semaphore sub-soort van IFNAM
0002 S_INSHD m 000002 XENIX gedeeld gegevens sub-soort van IFNAM
6000 S_IFBLK b 060000 blok speciaal (V7)
7000 S_IFMPB 070000 vermeervoudigd blok speciaal (V7)
8000 S_IFREG - 100000 normaal (V7)
9000 S_IFCMP 110000 VxFS ingedikt
9000 S_IFNWK n 110000 netwerk speciaal (HP-UX)
a000 S_IFLNK l@ 120000 symbolische koppeling (BSD)
b000 S_IFSHAD 130000 Solaris schaduw "inode" voor ACL (niet zichtbaar voor gebruikersruimte)
c000 S_IFSOCK s= 140000 socket (BSD; ook "S_IFSOC" op VxFS)
d000 S_IFDOOR D 150000 Solaris deur {"door"}
e000 S_IFWHT w% 160000 BSD "whiteout" {vlak-uit} (niet gebruikt voor "inode"
0200 S_ISVTX 001000 `sticky bit': bewaar gewisselde {"swapped"} text zelfs na gebruik (V7)
gereserveerd (SVID-v2)
Op niet-directories: dit bestand niet bufferen {"cache!"} (SunOS)
Op directories: beperkte schrappen vlag (SVID-v4.2)
0400 S_ISGID 002000 zet groep ID bij uitvoeren (V7)
voor directories: gebruik BSD regels voor voortplanting van gid
0400 S_ENFMT 002000 SysV bestand vergrendelen bekrachtiging (gedeeld met S_ISGID)
0800 S_ISUID 004000 zet gebruiker ID bij uitvoering (V7)
0800 S_CDF 004000 dir is een omgevings afhankelijk bestand {"context dependent"} (HP-UX)
Een "sticky" opdracht verscheen in Versie 32V AT&T UNIX.
chmod(2) {verander toestand}, chown(2) {verander eigenaar}, readlink(2)
{lees koppeling}, utime(2) {tijd}
Dit is een handleiding uit manpages-dev 1.29. Alles wat tussen
`{'..`}' staat is aanvullende vertaling, en hoort niet bij de originele
handleiding. Email naar <manpages-nl [AT] nl.org>.
$Id: stat.2,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $
Linux Mei 13, 1998 STAT(2)