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

NAAM

       close - sluit een bestandsindicator

BIBLIOTHEEK

       Standard C bibliotheek  (libc, -lc)

SAMENVATTING

       #include <unistd.h>

       int close(int bi);

BESCHRIJVING

       close()  sluit  een  bestandsindicator,  zodat deze niet langer naar een bestand wijst en hergebruikt kan
       worden. Eventuele record sloten op het bestand (zie fcntl(2)) die  het  eigendom  waren  van  het  proces
       worden verwijderd (onafhankelijk van de bestandsindicator die gebruikt werd om het slot te verkrijgen).

       Als  bi  de  laatste  dubbelganger  van een bepaalde bestandsindicator is, worden de systeem-middelen die
       erbij horen vrijgemaakt; als de  bestandsindicator  de  laatste  verwijzing  was  naar  een  bestand  dat
       verwijderd werd met unlink(2) dan wordt het bestand verwijderd.

EIND WAARDE

       Bij succes geeft close() nul terug. Bij falen wordt -1 teruggegeven en wordt errno overeenkomstig gezet.

FOUTEN

       EBADF  bi is geen geldige open bestandsindicator.

       EINTR  De close() aanroep werd onderbroken door een signaal; zie signal(7).

       EIO    Een Invoer/Uitvoer fout trad op.

       ENOSPC, EDQUOT
              Op  NFS  worden  deze  fouten  normaliter  gerapporteerd  tegen  de  eerste  schrijf  actie die de
              beschikbare opslag ruimte overschrijdt, maar  in  plaats  daarvan  tegen  een  volgende  write(2),
              fsync(2), of close().

       Zie OPMERKINGEN voor een discussie over waarom close() niet opnieuw geprobeerd moet worden na een fout.

VOLDOET AAN

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

OPMERKINGEN

       Een  succesvolle  close()  garandeert niet dat de gegevens succesvol zijn bewaard op de schijf doordat de
       kernel het schrijven ervan achterhoudt. Het is niet normaal voor een bestandssysteem om de  buffers  door
       te  spoelen  als  het bestand  wordt gesloten. Als u zeker moet zijn dat de gegevens fysiek bewaard zijn,
       gebruik dan fsync(2). (Het hangt nu verder van de schijf hardware af.)

       De sluit-bij-uitvoeren bestandsindicator vlag kan worden gebruikt om er  voor  zorg  te  dragen  dat  een
       bestandsindicator automatisch wordt gesloten bij een succesvolle execve(2); zie fcntl(2) voor details.

   Multithreaded processen en close()
       Het is hoogstwaarschijnlijk niet slim om bestandsindicatoren te sluiten terwijl ze in gebruik kunnen zijn
       door  systeem  aanroepen  in  andere  threads in hetzelfde proces. Omdat een bestandsindicator kan worden
       hergebruikt, zijn er obscure looptijd condities die tot onbedoelde neven effecten kunnen leiden.

       Bovendien,  overweeg  het  volgende  scenario  waar  twee  threads   dezelfde   operaties   op   dezelfde
       bestandsindicator uitvoeren:

       (1)  Een  thread  wordt  geblokkeerd  door  een  Invoer/Uitvoer  systeem aanroep op de bestandsindicator.
            Bijvoorbeeld, hij probeert te write(2) naar een pijp die al vol is, of probeert te read(2)  van  een
            stream socket die op dit moment geen gegevens beschikbaar heeft.

       (2)  Een andere thread sluit de bestandsindicator.

       Het  gedrag  in  deze  situatie  varieert  over systemen. Op sommige systemen, zal de blokkerende systeem
       aanroep onmiddellijk met een fout beëindigen zodra de bestandsindicator is gesloten

       Op Linux (en mogelijk enkele andere systemen),  is  het  gedrag  anders:  de  blokkerende  Invoer/Uitvoer
       systeem  aanroep  houdt  een  referentie naar de onderliggende bestandsindicator open, en deze referentie
       houdt de indicator open totdat de Invoer/Uitvoer systeem aanroep eindigt. (Zie open(2) voor een discussie
       over open bestandsindicatoren.) Dus kan de blokkerende systeem aanroep  in  de  eerste  thread  succesvol
       eindigen na de close() in de tweede thread.

   Omgaan met fout meldingen van close()
       Een  zorgvuldige programmeur controleert de uitvoer waarde van  close(), omdat het mogelijk is dat fouten
       van een vorige write(2)  operatie  alleen  worden  gerapporteerd  bij  de  finale  close()  die  de  open
       bestandsindicator  vrij geeft. Het niet controleren van de uitvoer waarde bij het sluiten van een bestand
       kan leiden tot zwijgend verlies van gegevens. Dit kan speciaal optreden met NFS en met schijf quota.

       Merk op, dat een fout uitvoer alleen gebruikt mag worden voor diagnose (m.a.w. een  waarschuwing  aan  de
       applicatie  dat  er  nog een Invoer/Uitvoer bezig kan zijn of dat er gefaalde Invoer/Uitvoer kan zijn) of
       gebruikt voor reparaties  (b.v. het opnieuw schrijven van een bestand of het maken van een backup).

       Opnieuw close() proberen na terug melding van een fout is verkeerd om te doen,  omdat  dat  er  voor  kan
       zorgen dat een hergebruikte bestandsindicator van een andere thread kan worden gesloten. Dit kan optreden
       doordat de Linux kernel de bestandsindicator altijd vroeg tijdens de close operatie los laat, daarbij hem
       voor  hergebruik beschikbaar maakt; de stappen die een fout kunnen geven, zoals doorspoelen van data naar
       het bestandssysteem of apparaat, treden alleen later tijdens de close operatie op.

       Veel andere implementatie sluiten de bestandsindicator ook op deze  manier  (behalve  in  het  geval  van
       EBADF,  aangezien  dit  betekent dat de bestandsindicator ongeldig was) zelfs als deze een vervolgens een
       fout rapporteren bij terugkeer van close(). POSIX.1 is momenteel  stil  op  dit  punt,  maar  er  bestaan
       plannen om dit gedrag te eisen in een volgende belangrijke uitgave van de standaard.

       Een  zorgvuldige  programmeur die Invoer/Uitvoer fouten wil weten mag de aanroep van close() vooraf laten
       gaan met een aanroep van fsync(2).

       De EINTR fout is een speciaal geval. Betreffende de EINTR fout, zegt POSIX.1-2008:

              Als close() werd onderbroken door  een  signaal  dat  ontvangen  moet  worden,  dan  moet  het  -1
              teruggeven met errno gezet op EINTR en de status van fildes is niet gespecificeerd.

       Dit  staat  het  gedrag  toe  dat  optreedt in Linux en veel andere implementaties waar, zoals bij andere
       fouten die kunnen worden gerapporteerd door close(), de bestandsindicator  gegarandeerd  wordt  gesloten.
       Hoewel  het  ook  een  andere  mogelijkheid  opent: dat de implementatie een EINTR fout terug geeft en de
       bestandsindicator open houdt. (Volgens de documentatie doet de  HP-UX  close()  implementatie  dit.)   De
       aanroeper  dient  nog  een  keer  close()  gebruiken  om  de  bestandsindicator te sluiten, om lekken van
       bestandsindicatoren te voorkomen. Deze verschillen in implementatie  gedrag  betekenen  een  moeilijkheid
       voor  overdraagbare  applicaties,  omdat  in  veel  implementaties  close() niet nogmaals hoeft te worden
       aangeroepen na een EINTR fout, en op zijn minst op een moet close() nog een keer aangeroepen  worden.  Er
       bestaan  plannen  om  dit  raadsel  aan  te  pakken  in  een  volgende belangrijke uitgave van de POSIX.1
       standaard.

ZIE OOK

       close_range(2), fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)

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                          30 oktober 2022                                        close(2)