close(2): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
Ingen redigeringssammanfattning
Ingen redigeringssammanfattning
Rad 15: Rad 15:


== Beskrivning ==
== Beskrivning ==
Funktionen '''close''' används för att stänga en öppen filbeskrivare. När filbeskrivaren stängs frigörs alla systemresurser som är associerade med den. Om filen är den sista filbeskrivaren som refererar till en öppen fil eller socket, kan systemet även:
Funktionen '''close''' används för att stänga en öppen filbeskrivare. Denna operation frigör systemresurser som är associerade med filbeskrivaren. Om filbeskrivaren är den sista som refererar till en öppen fil, pipe eller socket, kan följande hända:
* Skriva ut buffrade data till disk (för filer).
* Generera ett EOF (slut på fil) till andra processer som läser från en rörledning eller FIFO.
* Stänga en socket-anslutning.


Efter att en filbeskrivare har stängts, kan dess värde återanvändas av andra systemanrop som t.ex. [[open(2)]] eller [[dup(2)]].
* Buffrad skrivdata skrivs till disk.
* Ett EOF (slut på fil) skickas till läsare av en pipe eller FIFO.
* En socket-anslutning stängs, vilket kan trigga ett [[shutdown(2)]] för fjärrsystemet.
 
När en filbeskrivare stängs görs dess värde tillgängligt för återanvändning av framtida anrop till [[open(2)]], [[dup(2)]], osv. En process som avslutas stänger automatiskt alla öppna filbeskrivare som den äger.
 
**OBS:** Om en signal avbryter systemanropet innan det slutförts, kan filbeskrivaren ändå stängas. Kontrollera returkoden noggrant för att undvika att oavsiktligt använda en redan stängd filbeskrivare.


== Returnerar ==
== Returnerar ==
* '''0''' vid framgång.
* '''0''' om operationen lyckas.
* '''-1''' vid fel, och [[errno(3)]] sätts för att indikera felet.
* '''-1''' vid fel, och [[errno(3)]] sätts för att indikera typen av fel.


== Fel ==
== Fel ==
Följande fel kan inträffa vid användning av '''close''':
'''close''' kan misslyckas med följande felkoder:


* '''EBADF''': Filbeskrivaren är inte giltig eller inte öppen.
* '''EBADF''': Filbeskrivaren är ogiltig eller inte öppen.
* '''EINTR''': Systemanropet avbröts av en signal innan det kunde slutföras.
* '''EINTR''': Systemanropet avbröts av en signal innan det kunde slutföras.
* '''EIO''': Ett in-/ut-fel inträffade vid stängningen.
* '''EIO''': Ett in-/ut-fel inträffade under stängningen. Detta kan hända om nätverksanslutningen till en NFS-server avbryts innan all data har synkroniserats.
 
== Signalavbrott ==
Om en signal avbryter '''close''' och det misslyckas med '''EINTR''', är det inte säkert att försöka igen. Vissa operativsystem kan ha redan stängt filbeskrivaren, medan andra kan lämna den öppen.


== Standarder ==
== Standarder ==
Rad 40: Rad 46:


== Historia ==
== Historia ==
Funktionen '''close''' är en del av UNIX-arvet och har varit tillgänglig i alla versioner av UNIX sedan dess första implementation.
'''close''' har varit en del av UNIX sedan dess första version och har implementerats i nästan alla moderna operativsystem.


== Exempel ==
== Exempel ==
Här är ett exempel som visar användning av '''close''':
Här är ett exempel som visar korrekt användning av '''close''':


<pre>
<pre>
Rad 72: Rad 78:
== Anmärkningar ==
== Anmärkningar ==
* Om en process avslutas, stänger operativsystemet automatiskt alla öppna filbeskrivare som tillhör processen.
* Om en process avslutas, stänger operativsystemet automatiskt alla öppna filbeskrivare som tillhör processen.
* Om en signal avbryter '''close''' innan det kan slutföras, kan det vara osäkert att försöka igen, beroende på implementeringen.
* Om en signal avbryter '''close''' innan det kan slutföras, kan det vara osäkert att försöka igen beroende på operativsystemets implementation.
* Att inte stänga öppna filbeskrivare kan leda till att systemresurser läcker, vilket kan påverka prestandan negativt.
* Att inte stänga öppna filbeskrivare kan leda till resursläckage, vilket kan påverka prestanda och systemets stabilitet negativt.


== Se även ==
== Se även ==
Rad 82: Rad 88:
* [[closefrom(2)]]
* [[closefrom(2)]]
* [[errno(3)]]
* [[errno(3)]]
* [[shutdown(2)]]


== Kolofon ==
== Kolofon ==
Denna sida är en översättning av manualen för '''close(2)''', hämtad från ⟨https://man7.org/linux/man-pages/man2/close.2.html⟩, en del av Linux manualprojektet. För att rapportera fel eller föreslå förbättringar, besök ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.
Denna sida är en översättning av manualen för '''close(2)''', hämtad från ⟨https://man7.org/linux/man-pages/man2/close.2.html⟩, en del av Linux manualprojektet. För att rapportera fel eller föreslå förbättringar, besök ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.
= Sidslut =
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man2/close.2.html
<BR>[[PHP]]
<HR>
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
<BR><BR>Tack till [https://pc-service.se PC Service] som har  sponsrat [https://www.linux.se Linux.se] med webbhotell.
[[Kategori:Standard C-biblioteket ]]

Versionen från 22 november 2024 kl. 08.15

close(2) - Linux manual page

Namn

close - Stänger en filbeskrivare

Bibliotek

Standard C-biblioteket (libc, -lc)

Synopsis

#include <unistd.h>

int close(int fd);

Beskrivning

Funktionen close används för att stänga en öppen filbeskrivare. Denna operation frigör systemresurser som är associerade med filbeskrivaren. Om filbeskrivaren är den sista som refererar till en öppen fil, pipe eller socket, kan följande hända:

  • Buffrad skrivdata skrivs till disk.
  • Ett EOF (slut på fil) skickas till läsare av en pipe eller FIFO.
  • En socket-anslutning stängs, vilket kan trigga ett shutdown(2) för fjärrsystemet.

När en filbeskrivare stängs görs dess värde tillgängligt för återanvändning av framtida anrop till open(2), dup(2), osv. En process som avslutas stänger automatiskt alla öppna filbeskrivare som den äger.

    • OBS:** Om en signal avbryter systemanropet innan det slutförts, kan filbeskrivaren ändå stängas. Kontrollera returkoden noggrant för att undvika att oavsiktligt använda en redan stängd filbeskrivare.

Returnerar

  • 0 om operationen lyckas.
  • -1 vid fel, och errno(3) sätts för att indikera typen av fel.

Fel

close kan misslyckas med följande felkoder:

  • EBADF: Filbeskrivaren är ogiltig eller inte öppen.
  • EINTR: Systemanropet avbröts av en signal innan det kunde slutföras.
  • EIO: Ett in-/ut-fel inträffade under stängningen. Detta kan hända om nätverksanslutningen till en NFS-server avbryts innan all data har synkroniserats.

Signalavbrott

Om en signal avbryter close och det misslyckas med EINTR, är det inte säkert att försöka igen. Vissa operativsystem kan ha redan stängt filbeskrivaren, medan andra kan lämna den öppen.

Standarder

Funktionen close följer:

  • POSIX.1-2001
  • POSIX.1-2008
  • System V Interface Definition (SVID)

Historia

close har varit en del av UNIX sedan dess första version och har implementerats i nästan alla moderna operativsystem.

Exempel

Här är ett exempel som visar korrekt användning av close:

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
    const char *filename = "example.txt";
    int fd = open(filename, O_RDONLY);

    if (fd == -1) {
        perror("open");
        return 1;
    }

    // Använd filbeskrivaren för att läsa eller skriva...

    if (close(fd) == -1) {
        perror("close");
        return 1;
    }

    return 0;
}

Anmärkningar

  • Om en process avslutas, stänger operativsystemet automatiskt alla öppna filbeskrivare som tillhör processen.
  • Om en signal avbryter close innan det kan slutföras, kan det vara osäkert att försöka igen beroende på operativsystemets implementation.
  • Att inte stänga öppna filbeskrivare kan leda till resursläckage, vilket kan påverka prestanda och systemets stabilitet negativt.

Se även

Kolofon

Denna sida är en översättning av manualen för close(2), hämtad från ⟨https://man7.org/linux/man-pages/man2/close.2.html⟩, en del av Linux manualprojektet. För att rapportera fel eller föreslå förbättringar, besök ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.