Provided by: manpages-nl-dev_4.13-4_all bug

NAAM

       stat, fstat, lstat, fstatat - verkrijg bestand status.

SAMENVATTING

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *padnaam, struct stat *statbuf);
       int fstat(int fd, struct stat *statbuf);
       int lstat(const char *padnaam, struct stat *statbuf);

       #include <fcntl.h>           /* Definitie van AT_* constanten */
       #include <sys/stat.h>

       int fstatat(int dirfd, const char *padnaam, struct stat *statbuf,
                   int vlaggen);

   Test Macro´s in glibc (zie feature_test_macros(7)):

       lstat():
           /* glibc 2.19 en eerder */ _BSD_SOURCE
               || /* Vanaf glibc 2.20 */ _DEFAULT_SOURCE
               || _XOPEN_SOURCE >= 500
               || /* Vanaf glibc 2.10: */ _POSIX_C_SOURCE >= 200112L

       fstatat():
           Vanaf glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Vóór 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 structuur, die de volgende velden bevat:

           struct stat {
               dev_t         st_dev;      /* ID van het apparaat dat het bestand bevat */
               ino_t         st_ino;      /* inode nummer */
               mode_t        st_mode;     /* bestandstype en modus */
               nlink_t       st_nlink;    /* aantal harde koppelingen */
               uid_t         st_uid;      /* gebruiker ID van eigenaar */
               gid_t         st_gid;      /* groep ID van eigenaar */
               dev_t         st_rdev;     /* apparaat ID (als speciaal bestand)  */
               off_t         st_size;     /* totale grootte, in bytes */
                blksize_t st_blksize;     /* Blok grootte voor bestandssysteem I/O */
               blkcnt_t  st_blocks;      /* Aantal toegekende 512B blokken */

               /* Vanaf Linux 2.6, ondersteund de kernel nanoseconden
                  precisie voor de volgende tijdstempel velden.
                  Voor details over vóór Linux 2.6, zie OPMERKINGEN. */

               struct timespec st_atim;  /* Tijdstip laatste toegang */
               struct timespec st_mtim;  /* Tijdstip laatste wijziging */
               struct timespec st_ctim;  /* Tijdstip laatste status verandering */

           #define st_atime st_atim.tv_sec      /* achterwaartse compatibiliteit */
           #define st_mtime st_mtim.tv_sec
           #define st_ctime st_ctim.tv_sec
           };

       NOTITIE: de volgorde van de velden in de stat structuur varieert  over  de  verschillende  architecturen.
       Bovendien toont bovenstaande definitie niet de opvul bytes die aanwezig kunnen zijn tussen sommige velden
       op de diverse architecturen. Raadpleeg de glibc en kernel broncode als u deze details moet kennen.

       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.

       De velden in de stat structure zijn als volgt:

       st_dev Dit veld beschrijft het apparaat op welk zich het bestand bevind. (De major(3) en minor(3) macro´s
              kunnen bruikbaar zijn om het apparaat ID in dit veld te ontleden.)

       st_ino Dit veld bevat het inode nummer van het bestand.

       st_mode
              Dit veld bevat het type van het bestand en mode. Zie inode(7) voor verdere informatie.

       st_nlink
              Dit veld bevat het aantal harde koppelingen naar het bestand.

       st_uid Dit veld bevat het gebruikers ID van de eigenaar van het bestand.

       st_gid Dit veld beat het ID van de groep eigenaar van het bestand.

       st_rdev
              Dit veld beschrijft het apparaat dat dit bestand (inode) voorsteld.

       st_size
              Dit veld geeft de grootte van het bestand  (als  het  een  regulier  bestand  of  een  symbolische
              koppeling is) in bytes. De grootte van de een symbolische koppeling is gelijk aan de lengte van de
              padnaam die het bevat, zonder de afsluitende nul.

       st_blksize
              Dit veld geeft de "voorkeur" blok grootte voor efficiënte bestandssysteem invoer/uitvoer.

       st_blocks
              Dit  veld  bevat  een  indicatie  van  het  aantal blokken toegewezen aan het bestand, in 512-byte
              eenheden. (Deze kan kleiner zijn dan st_size/512 als het bestand gaten bevat.)

       st_atime
              Dit is de laatste toegangstijd van de bestands data.

       st_mtime
              Dit is de tijd van de laatste modificatie van de bestands data/.

       st_ctime
              Dit is de tijdsstempel van de laatste status verandering van het  bestand  (tijd  van  de  laatste
              verandering van de inode).

       Zie inode(7) voor verdere informatie over de velden hierboven.

   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)
              Koppel de uiteinde ("basename")  component van padnaam niet automatisch aan als het een map is met
              een automatisch aankoppelpunt. Dit maakt het voor de aanroeper  mogelijk  om  attributen  van  een
              automatisch  aankoppelpunt  te  verzamelen  (in plaats van die van de locatie die aangekoppeld zou
              worden). Instantieer vanaf Linux 4.14 geen niet-bestaande naam in een  map  die  bedoeld  is  voor
              automatische  aankoppelpunten.  Deze  vlag heeft geen effect als het aankoppelpunt al aangekoppeld
              was.

              Beide stat()  en lstat() werken alsof  AT_NO_AUTOMOUNT werd gezet.

              AT_NO_AUTOMOUNT  kan worden gebruikt in hulpmiddelen die mappen scannen om ter voorkoming van  het
              massaal aankoppelen van een map van automatische aankoppelpunten.

              De vlag is Linux specifiek; definieer _GNU_SOURCE om zijn definitie te verkrijgen.

       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.

       EFAULT Verkeerd adres.

       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.

       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.

       De volgende extra fouten kunnen optreden voor fstatat():

       EBADF  mapbi is geen geldige bestandsindicator.

       EINVAL Ongeldige vlag opgegeven in vlaggen.

       ENOTDIR
              padnaam is relatief en mapbi is een bestandsindicator die naar een bestand wijst die geen map is.

VERSIES

       fstatat() werd toegevoegd aan Linux in kernel 2.6.16; bibliotheek ondersteuning werd toegevoegd aan glibc
       in versie 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

   Tijdstempel velden
       Oudere  kernels  en  oudere  standaarden  ondersteunden  nanoseconden  tijdstempel velden niet. In plaats
       daarvan waren er drie tijdstempel velden  —st_atime,  st_mtime,  en  st_ctime—aangeduid  als  time_t  die
       tijdstempels noteerden in een-seconde precisie.

       Vanaf  kernel  2.5.48  ondersteund de stat structure nanoseconden resolutie in de drie bestandstijdstepel
       velden. De nanoseconden componenten  van  elke  tijdstempel  zijn  beschikbaar  via  namen  van  de  vorm
       st_atim.tv_nsec,   mits  geschikte  test  macros  werden  gedefinieerd.  Nanoseconden  tijdstempels  zijn
       gestandaardiseerd in POSIX.1-2008, en vanaf  versie  2.12  toont  glibc  de  namen  van  de  nanoseconden
       componenten  als _POSIX_C_SOURCE werd gedefinieerd met een waarde 200809L of hoger, of _XOPEN_SOURCE werd
       gedefinieerd met een waarde 700 of hoger. Tot en met glibc 2.19 werd de  definitie  van  de  nanoseconden
       componenten ook gedefinieerd zodra  _BSD_SOURCE of _SVID_SOURCE werden gedefinieerd. Als geen van de hier
       voor  genoemde  macros  werd  gedefinieerd dan worden de nanoseconden waarden getoond met de namen van de
       vorm st_atimensec.

   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 <sys/types.h>
       #include <sys/stat.h>
       #include <stdint.h>
       #include <time.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/sysmacros.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:  [%jx,%jx]\n",
                   (uintmax_t) major(sb.st_dev),
                   (uintmax_t) 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 count:               %ju\n", (uintmax_t) sb.st_nlink);
           printf("Ownership:                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),   capabilities(7),
       inode(7), symlink(7)

COLOFON

       Deze  pagina  is  onderdeel  van  release  5.10 van het Linux man-pages-project. Een beschrijving van het
       project,  informatie  over  het  melden  van  bugs  en  de  nieuwste  versie  van  deze  pagina  zijn  op
       https://www.kernel.org/doc/man-pages/ te vinden.

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                                           13 augustus 2020                                         STAT(2)