open(2)

Från Wiki.linux.se
Version från den 22 november 2024 kl. 08.23 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

open(2) - Öppnar en fil

Namn

open - Öppnar och eventuellt skapar en fil

Synopsis

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

int open(const char *pathname, int flags, ...);
int openat(int dirfd, const char *pathname, int flags, ...);

Beskrivning

    • open()** öppnar den fil som specificeras av pathname. Om filen inte existerar kan den skapas beroende på inställningen av flags och de tillhandahållna behörigheterna. Funktionen returnerar en filbeskrivare som används för efterföljande operationer på filen.

Argument

  • pathname
 Den sökväg till filen som ska öppnas.
  • flags
 En eller flera flaggor som specificerar öppningsläget och andra alternativ. De vanligaste är:
 * O_RDONLY – Öppna för endast läsning.
 * O_WRONLY – Öppna för endast skrivning.
 * O_RDWR – Öppna för både läsning och skrivning.
 * O_CREAT – Skapa filen om den inte existerar (kräver mode).
 * O_TRUNC – Trunkera filen till längd 0 om den existerar.
 * O_APPEND – Lägg till data i slutet av filen.
  • mode
 Används om filen skapas (endast relevant med flaggan O_CREAT). Detta specificerar filens behörigheter (t.ex. 0644).

Funktioner

  • open()
 Öppnar en fil med absolut eller relativ sökväg.
  • openat()
 Liknar **open()**, men gör det möjligt att specificera en baspunkt för pathname relativt till en katalogbeskrivare (dirfd).

Returneringsvärde

Vid framgång returnerar **open()** och **openat()** en filbeskrivare (ett icke-negativt heltal). Vid fel returneras -1, och errno sätts för att indikera felet.

Fel

Vanliga fel inkluderar:

  • EACCES
 Behörighet nekas för den begärda operationen.
  • EEXIST
 Filen existerar redan, och flaggan O_CREAT | O_EXCL användes.
  • ENOENT
 Sökvägen existerar inte, och O_CREAT användes inte.
  • ENOTDIR
 En del av sökvägen är inte en katalog.
  • EMFILE
 Processen har nått maximalt antal öppna filer.

Exempel

Öppna en fil för både läsning och skrivning, skapa den om den inte finns:

int fd = open("example.txt", O_RDWR | O_CREAT, 0644);
if (fd == -1) {
    perror("open");
    exit(EXIT_FAILURE);
}

Se även

Författare

Denna manualsida skrevs av Michael Kerrisk.

Källor

Den officiella manualen finns på man7.org.