öppen (systemanrop)

För de flesta filsystem initierar ett program åtkomst till en fil i ett filsystem med det öppna systemanropet . Detta tilldelar resurser associerade med filen (filbeskrivningen ) , och returnerar ett handtag som processen kommer att använda för att referera till den filen. I vissa fall utförs öppningen av den första åtkomsten.

Samma fil kan öppnas samtidigt av flera processer, och till och med av samma process, vilket resulterar i flera filbeskrivningar för samma fil; beroende på filorganisation och filsystem. Åtgärder på deskriptorerna som att flytta filpekaren eller stänga den är oberoende – de påverkar inte andra deskriptorer för samma fil. Operationer på filen, till exempel en skrivning , kan ses av operationer på de andra deskriptorerna: en senare läsning kan läsa nyskrivna data.

Under öppningen kan filsystemet allokera minne för buffertar , eller så kan det vänta tills den första operationen.

Den absoluta sökvägen till filen är löst. Detta kan innefatta att ansluta till en fjärrvärd och meddela en operatör att ett flyttbart medium krävs. Det kan innefatta initiering av en kommunikationsenhet. Vid denna tidpunkt kan ett fel returneras om värden eller mediet inte är tillgängligt. Den första åtkomsten till åtminstone katalogen i filsystemet utförs. Ett fel kommer vanligtvis att returneras om de högre komponenterna i sökvägen ( kataloger ) inte kan hittas eller nås. Ett fel kommer att returneras om filen förväntas finnas och den inte finns eller om filen inte redan borde existera och den gör det.

Om filen förväntas existera och den gör det, valideras filåtkomsten, begränsad av behörighetsflaggor i filens metadata eller åtkomstkontrolllista , mot den begärda typen av operationer. Detta kräver vanligtvis ytterligare filsystemåtkomst även om i vissa filsystem kan metaflaggor vara en del av katalogstrukturen.

Om filen skapas kan filsystemet allokera den ursprungliga initiala mängden lagringsutrymme eller en specificerad mängd beroende på filsystemets kapacitet. Om detta misslyckas kommer ett fel att returneras. Uppdatering av katalogen med den nya posten kan utföras eller fördröjas tills stängningen utförs .

Olika andra fel som kan uppstå under öppningen inkluderar kataloguppdateringsfel, otillåtna flera anslutningar, mediafel, kommunikationslänksfel och enhetsfel.

Returvärdet måste alltid undersökas och en felspecifik åtgärd vidtas.

I många fall kan programspråksspecifika runtime-bibliotek öppnas utföra ytterligare åtgärder inklusive initialisering av en runtime-biblioteksstruktur relaterad till filen.

Så snart en fil inte längre behövs bör programmet stänga den. Detta kommer att göra att körtidsbibliotek och filsystemsbuffertar uppdateras till det fysiska mediet och tillåter andra processer att komma åt data om exklusiv användning hade krävts. Vissa runtime-bibliotek kan stänga en fil om programmet anropar runtime exit. Vissa filsystem kan utföra nödvändiga operationer om programmet avslutas. Ingen av dessa kommer sannolikt att ske i händelse av en kärna eller strömavbrott. Detta kan orsaka skadade filsystemstrukturer som kräver körning av privilegierade och långa filsystemsverktyg under vilka hela filsystemet kan vara otillgängligt.

öppna samtalsargument

  1. Sökvägen till filen ,
  2. Den typ av åtkomst som begärs till filen (läsa, skriva, lägga till etc.),
  3. Den initiala filbehörigheten begärs med det tredje argumentet som kallas mode . Detta argument är endast relevant när en ny fil skapas.

Efter att ha använt filen, bör processen stänga filen med close call, vilket tar filbeskrivningen för filen som ska stängas. Vissa filsystem inkluderar en disposition för att tillåta att filen släpps.

Vissa datorspråk inkluderar runtime-bibliotek som inkluderar ytterligare funktionalitet för särskilda filsystem. Den öppna (eller någon hjälprutin) kan innehålla specifikationer för nyckelstorlek, poststorlek, anslutningshastighet. Vissa öppna rutiner inkluderar specifikation av programkoden som ska exekveras i händelse av ett fel.

Perl språkform

  öppna  FILHANDLE  ,  MODE  [,  EXPR  ] 

till exempel:

    öppen  (  min  $fh  ,  ">"  ,  "output.txt"  ); 

Perl använder också bindningsfunktionen i Tie::File -modulen för att associera en array med en fil. Funktionen tie ::AnyDBM_File associerar en hash med en fil.

C-bibliotekets POSIX definition

Det öppna anropet är standardiserat av POSIX -specifikationen för C-språk :

      
        
     
         int  öppen  (  const  char  *  sökväg  ,  int  oflag  ,  ...  /*, mode_t mode */  );  int  openat  (  int  fd  ,  const  char  *  sökväg  ,  int  oflag  ,  ...);  int  creat  (  const  char  *  path  ,  mode_t  mode  );  FIL  *  fopen  (  const  char  *  limit  filnamn  ,  const  char  *  limit  mode  ); 

Värdet som returneras är en fildeskriptor som är en referens till en processspecifik struktur som bland annat innehåller en positionspekare som indikerar vilken plats i filen som kommer att påverkas av nästa operation.

Open kan återkomma −1 vilket indikerar ett fel med fel som inte specificerar felet.

Filsystemet uppdaterar också en global tabell över alla öppna filer som används för att avgöra om en fil för närvarande används av någon process.

väg

Namnet på filen som ska öppnas. Den inkluderar filsökvägen som definierar var, i vilket filsystem, filen finns (eller ska skapas).

openat förväntar sig en relativ väg.

oflag

Detta argument bildas genom att ELLER kombinera valfria parametrar och (från < fcntl.h >) en av:

O_RDONLY , O_RDWR och O_WRONLY

Alternativparametrar inkluderar:

  • O_APPEND data som skrivs kommer att läggas till i slutet av filen. Filoperationerna kommer alltid att justera positionspekaren till slutet av filen.
  • O_CREAT Skapa filen om den inte finns; annars misslyckas öppningen ställer errno till ENOENT.
  • O_EXCL Används med O_CREAT om filen redan finns, misslyckas, ställerrno till EEXIST.
  • O_TRUNC Om filen redan finns, kassera dess tidigare innehåll och reducera den till en tom fil. Ej tillämpligt för en enhet eller ett namngivet rör.

Ytterligare flaggor och fel definieras i öppet anrop.

creat() implementeras som:

     

       
 int  creat  (  const  char  *  sökväg  ,  mode_t  läge  )  {  return  open  (  sökväg  ,  O_WRONLY  |  O_CREAT  |  O_TRUNC  ,  läge  );  } 

fopen använder strängflaggor som r , w , a och + och returnerar en filpekare som används med fgets , fputs och fclose .

läge

Valfritt och endast relevant när du skapar en ny fil, definierar filbehörigheterna . Dessa inkluderar att läsa, skriva eller köra filen av ägaren, gruppen eller alla användare. Läget maskeras av anropsprocessens umask : bitar som ställts in i umasken rensas i läget.

Se även

  • Filbeskrivning – hur det fungerar och andra funktioner relaterade till att öppna

Anteckningar

  •   Avancerad programmering i UNIX-miljön av W. Richard Stevens ISBN 81-7808-096-6
  • UNIX koncept & tillämpning av Sumitabh Das