Provided by: manpages-nl-dev_4.21.0-2_all 

NAAM
stat, fstat, lstat, fstatat - verkrijg bestand status.
BIBLIOTHEEK
Standard C bibliotheek (libc, -lc)
SAMENVATTING
#include <sys/stat.h>
int stat(const char *beperk padnaam,
struct stat *beperk statbuf);
int fstat(int fd, struct stat *statbuf);
int lstat(const char *beperk padnaam,
struct stat *beperk statbuf);
#include <fcntl.h> /* Definitie van AT_* constanten */
#include <sys/stat.h>
int fstatat(int dirfd, const char *restrict padnaam,
struct stat *beperk statbuf, int vlaggen);
Feature Test Macro´s eisen in glibc (zie feature_test_macros(7)):
lstat():
/* Vanaf glibc 2.20 */ _DEFAULT_SOURCE
|| _XOPEN_SOURCE >= 500
|| /* Vanaf glibc 2.10: */ _POSIX_C_SOURCE >= 200112L
|| /* glibc 2.19 en eerder */ _BSD_SOURCE
fstatat():
Vanaf glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Voor glibc 2.10:
_ATFILE_SOURCE
BESCHRIJVING
Deze functies retourneren informatie over een bestand in de buffer aangewezen door statbuf. Er zijn geen
rechten vereist op het bestand zelf, maar —in het geval van stat(), fstatat() en lstat()— zijn uitvoer
(zoek) rechten vereist op alle mappen in padnaam die naar het bestand leiden.
stat() en fstatat() geven informatie over het bestand aangewezen door padnaam; de verschillen voor
fstatat() worden hieronder beschreven.
lstat() is gelijk aan stat(), behalve dat als padnaam een symbolische koppeling is, dan informatie over
de koppeling zéqlf wordt teruggegeven, en niet van het bestand waar naar verwezen wordt.
fstat() is gelijk aan stat(), behalve dat het bestand van welk de informatie wordt opgevraagd wordt
gespecificeerd door de bestandsindicator fd.
De stat structuur
Al deze systeem aanroepen retourneren een stat structure (zie stat(3type)):
Opmerking: vanwege prestatie redenen en vanwege de eenvoud, mogen diverse velden in de stat structuur
status informatie bevatten over verschillende momenten gedurende de uitvoer van de systeem aanroep.
Bijvoorbeeld, als st_mode of st_uid werd veranderd door een ander proces door de aanroep van chmod(2) of
chown(2), dan mag stat(2) de oude st_mode teruggeven, samen met de nieuwe st_uid, of de oude st_uid samen
met de nieuwe st_mode.
fstatat()
De fstatat() systeem aanroep is een meer algemeen interface voor het verkrijgen van bestandsinformatie
dat nog steeds exact hetzelfde gedrag kan bieden van elk van stat(), lstat(), and fstat().
Als de padnaam opgegeven in padnaam relatief is, dan wordt deze geïnterpreteerd als relatief aan de map
aangewezen door de bestandsindicator dirfd (in plaats van relatief ten opzichte van de huidige werkmap
van het aanroepende proces, zoals dit gedaan wordt door stat() en lstat() voor een relatieve padnaam).
Als padnaam relatief is en dirfd heeft de speciale waarde AT_FDCWD, dan wordt padnaam geïnterpreteerd als
relatief ten opzichte van de huidige werkmap van het aanroepende proces (zoals stat() en lstat()).
Als padnaam absoluut is, dan wordt mapbi genegeerd.
vlaggen kan ofwel 0 zijn, of kan een of meer van de volgende vlaggen ORed bevatten:
AT_EMPTY_PATH (vanaf Linux 2.6.39)
Als padnaam een lege tekenreeks is, werk dan op het bestand aangewezen doorzoek dirfd (die kan
zijn verkregen door het gebruik van open(2) O_PATH vlag). In dit geval kan dirfd naar elk type
bestand wijzen, niet slechts een map, en het gedrag van fstatat() is vergelijkbaar met dat van
fstat(). Als dirfd gelijk is aan AT_FDCWD, dan werkt de aanroep op de huidige werkmap. Deze vlag
is Linux-specifiek; definieer _GNU_SOURCE om de definiete te verkrijgen.
AT_NO_AUTOMOUNT (vanaf Linux 2.6.38)
Automount de laatste component van het einde ("basename") van p[adnaam niet. Vanaf Linux 3.1
wordt deze vlag genegeerd. Vanaf Linux 4.11 is deze vlag impliciet.
AT_SYMLINK_NOFOLLOW
Als padnaam een symbolische koppeling is, volg deze niet: in plaats daarvan retourneer informatie
over de koppeling zelf, zoals lstat(). (Standaard volgt fstatat() symbolische koppelingen, net als
stat().)
Zie openat(2) voor een uitleg over de noodzaak van fstatat().
EIND WAARDE
Bij succes wordt nul teruggegeven. Bij falen wordt -1 teruggegeven en wordt errno overeenkomstig gezet.
FOUTEN
EACCES Het doorzoek recht werd geweigerd voor een van de mappen in de pad voorvoegsel van padnaam. (Zie
ook path_resolution(7).)
EBADF bi is niet een geldige open-voor-schrijven bestandindicator.
EBADF (fstatat()) padnaam is relatief maar dirfd is noch AT_FDCWD noch een geldige bestandsindicator.
EFAULT Verkeerd adres.
EINVAL (fstatat()) Ongeldige vlag opgegeven in vlaggen.
ELOOP Teveel symbolische koppelingen werden tegengekomen bij het doorlopen van padnaam.
ENAMETOOLONG
padnaam is te lang.
ENOENT Een map-deel van padnaam zou toegankelijk geweest zijn maar bestaat niet of was een zwevende
symbolische koppeling.
ENOENT padnaam is een lege tekenreeks en AT_EMPTY_PATH werd niet opgegeven in vlaggen.
ENOMEM Geheugen is op (kernel geheugen).
ENOTDIR
Een onderdeel in het pad voorvoegsel in padnaam is geen map.
ENOTDIR
(fstatat()) padnaam is relatief en mapbi is een bestandsindicator die naar een bestand wijst dat
geen map is.
EOVERFLOW
padnaam of fd wijst naar een bestand waarvan grootte, inode nummer of aantal blokken niet kan
worden gerepresenteerd in respectievelijk de velden off_t, ino_t, of blkcnt_t. Deze fout kan
optreden wanneer bij voorbeeld een applicatie die compileert werd op een 32-bit platform zonder
-D_FILE_OFFSET_BITS=64, stat() aanroept op een bestand waarvan de grootte meer is dan (1<<31)-1
bytes.
VERSIES
fstatat() werd toegevoegd aan Linux 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc 2.4.
VOLDOET AAN
stat(), fstat(), lstat(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1.2008.
fstatat(): POSIX.1-2008.
Volgens POSIX.1-2001, moet lstat() voor een symbolische koppeling geldige informatie retourneren in het
st_size veld en het bestandstype van het st_mode veld van de stat structure. POSIX.1-2008 vernauwt deze
specificatie door te vereisen dat lstat() geldige informatie moet retourneren in alle velden behalve de
mode bits in st_mode.
Gebruik van de st_blocks en st_blksize velden is minder overdraagbaar. (Deze werden geïntroduceerd in
BSD. De interpretatie verschilt tussen systemen, en mogelijk zelfs op een enkel systeem waar NFS
koppelingen gebruikt worden.)
OPMERKINGEN
C library/kernel verschillen
In de loop van de tijd hebben vergrotingen van de stat structure geleid tot drie opeenvolgende versies
van stat(0: sys_stat() (slot __NR_oldstat), sys_newstat() (slot __NR_stat), en sys_stat64() (slot
__NR_stat64) op 32-bit platformen zoals i386. De eerste twee versies waren al aanwezig in Linux 1.0
(hoewel met verschillende namen); de laatste werd toegevoegd in Linux 2.4. Vergelijkbare opmerkingen
zijn van toepassing op fstat() en lstat().
De interne kernel versies van de stat structure die behandelt worden door de verschillende versies, zijn
respectievelijk:
__old_kernel_stat
De originele structure, met nogal kleine velden en zonder opvulling.
stat Een groter st_ino veld en opvulling toegevoegd aan verschillende delen van de structure om
toekomstige uitbreidingen toe te staan.
stat64 Een nog groter st_ino veld, grotere st_uid en st_gid velden om in de expansie van UID´s EN GID´s
naar 32 bits door Linux-2.4 te voorzien, en verschillende andere vergrote velden en meer opvulling
in de structure. (Diverse opvul bytes werden geconsumeerd in Linux 2.6, met de aankomst van 32-bit
apparaat ID´s en nanoseconden componenten in de tijdstempel velden.)
De glibc stat() omwikkel functies verbergen deze details van de applicaties, door het aanroepen van de
meest recente versie van de systeem aanroep die door de kernel beschikbaar wordt gesteld en het opnieuw
inpakken van de verkregen informatie indien nodig voor oude toepassingen.
Op moderne 64-bit systemen is het leven eenvoudiger: daar bestaat een enkele stat() systeem aanroep en de
kernel werkt met een stat structure die velden van voldoende grootte bevat.
De onderliggende systeem aanroep gebruikt door de glibc fstatat() omwikkel functie heet eigenlijk
fstatat64() of op sommige architecturen newfstatat().
VOORBEELDEN
Het volgende programma roept lstat() aan en toont geselecteerde velden in de teruggegeven stat structure.
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <time.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <padnaam>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (lstat(argv[1], &sb) == -1) {
perror("lstat");
exit(EXIT_FAILURE);
}
printf("ID van het bevattende apparaat: [%x,%x]\n",
major(sb.st_dev),
minor(sb.st_dev));
printf("Bestandstype: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("blok apparaat\n"); break;
case S_IFCHR: printf("teken apparaat\n"); break;
case S_IFDIR: printf("map\n"); break;
case S_IFIFO: printf("FIFO/pijp\n"); break;
case S_IFLNK: printf("symbolische koppeling\n"); break;
case S_IFREG: printf("regulier bestand\n"); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("onbekend?\n"); break;
}
printf("I-node number: %ju\n", (uintmax_t) sb.st_ino);
printf("Mode: %jo (octal)\n",
(uintmax_t) sb.st_mode);
printf("Link teller: %ju\n", (uintmax_t) sb.st_nlink);
printf("Eigenaarschap: UID=%ju GID=%ju\n",
(uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
printf("Voorkeur I/O blok grootte: %jd bytes\n",
(intmax_t) sb.st_blksize);
printf("Bestandsgrootte: %jd bytes\n",
(intmax_t) sb.st_size);
printf("Toegewezen blokken: %jd\n",
(intmax_t) sb.st_blocks);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}
ZIE OOK
ls(1), stat(1), access(2), chmod(2), chown(2), readlink(2), statx(2), utime(2), stat(3type),
capabilities(7), inode(7), symlink(7)
VERTALING
De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario
Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>
Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de
Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.
Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-
dutch@lists.debian.org.
Linux man-pagina's 6.03 5 februari 2023 stat(2)