Presentation laddar. Vänta.

Presentation laddar. Vänta.

Jonny Karlsson 6.9.2005 PROCESSPROGRAMMERING Föreläsning 2 (6.9.2005) Innehåll: -Fildeskriptorer -Filhantering -Felhantering.

Liknande presentationer


En presentation över ämnet: "Jonny Karlsson 6.9.2005 PROCESSPROGRAMMERING Föreläsning 2 (6.9.2005) Innehåll: -Fildeskriptorer -Filhantering -Felhantering."— Presentationens avskrift:

1 Jonny Karlsson 6.9.2005 PROCESSPROGRAMMERING Föreläsning 2 (6.9.2005) Innehåll: -Fildeskriptorer -Filhantering -Felhantering

2 Jonny Karlsson 6.9.2005 Filhantering FILDESKRIPTORER Alla öppna filer refereras till operativsystemets kernel via fildeskriptorer. Fördefinierade fildeskriptorer: 0 – Standard Input (tangentbordet) 1 – Standard Output (bildskärmen) 2 – Standard Error (felmeddelanden som visas på bildskärmen) ATT ÖPPNA OCH STÄNGA EN FIL int open(const char *pathname, int flags, mode_t mode); Ett systemanrop som öppnar en given fil och returnerar en fildeskriptor pathname En char pekare som anger URL till filen som skall öppnas flags Anger olika optioner för filen som öppnas mode Anger filrättigheter för filen som öppnas

3 Jonny Karlsson 6.9.2005 Filhantering Flags Endast ett av följande argument får användas: O_RDONLYÖppnar en fil för läsning O_WRONLYÖppnar en fil för skrivning O_RDWRÖppnar en fil för både läsning och skrivning O_APPENDSkriver till slutet på en fil, O_CREATSkapar filen om den inte existerar. Kräver ett tredje argument som anger filrättigheterna för den skapdade filen. O_TRUNCSkriver över innehållet i en fil. O_EXECLSkapar ett felmeddelande tillsammans med O_CREAT ifall filen existerar. O_NONBLOCKÖppnar i ”icke-blockerande läge. O_SYNCTvingar write funktionen att vänta på en fysisk I/O – operation

4 Jonny Karlsson 6.9.2005 Filhantering Mode S_IRUSRuser - read S_IWUSRuser – write S_IXUSRuser - ececute S_IRGRPgroup - read S_IWGRPgroup - write S_IXGRPgroup - execute S_IROTHother - read S_IWOTHother - write S_IXOTHother - execute

5 Jonny Karlsson 6.9.2005 Filhantering Exempel: int deskr; deskr = open(”testfil.txt”, O_RDWR | O_CREAT | O_APPEND, S_IWRITE | S_IREAD); Öppnar filen testfil.txt för läsning och skrivning. Filen skapas om den inte finns och tilldelas skriv och läsrättigheter. Om filen finns och där redan finns innehåll i filen, sätts nytt inehåll till i slutet av filen (skriver ej över gammalt innehåll). Open funktionen returnerar det lägsta lediga fildeskriptorvärdet. Deskriptorerna 0, 1 och 2 är alltid reserverade för stdin, stdout, och stderr. Dessa förvalda deskriptorer kan omstyras till en fil genom att stänga någon av dessa deskriptorer före utförande av open. En fildeskriptor stängs med : int close(int deskr);

6 Jonny Karlsson 6.9.2005 Filhantering LÄS- OCH SKRIVOPERATIONER ssize_t write(int fildeskr, const void *buffer, size_t buffersize); Skriver till filen som fildeskriptorn fildeskr refererar till. Returnerar antalet skrivna bytes eller -1 om fel uppstår. Exempel: deskr = open(.....); scanf(”%s”, buf); write(deskr, buf, strlen(buf)); /*Läser ett meddelande från tangentbordet och skriver in det i den fil deskr referarar till*/

7 Jonny Karlsson 6.9.2005 Filhantering ssize_t read(int deskr, void *buffer, size_t max_size); Läser ur filen som fildeskriptorn deskr refererar till. Returnerar antalet lästa bytes eller -1 om fel uppstår. Exempel: char *buffer; deskr = open(.....); read(deskr, buffer, 50); /*Läser innehållet ur filen deskr refererar till och sparar det i buffer*/

8 Jonny Karlsson 6.9.2005 Felhantering FUNKTIONSBIBLIOTEK FÖR FELHANTERING errno.h extern int errno; En integer som specificeras av funktioner då fel uppstår för att indikera exakt vad som gått fel. const char *sys_errlist[]; En global lista på felmeddelanden som inexeras av errno void perror(const char *message); En funktion som kan användas för att skriva ut ett felmeddelande till ”standard error” som beskriver det senast felet som uppstått under ett system- eller funktionsanrop. Skriver ut sys_errlist[errno].

9 Jonny Karlsson 6.9.2005 Felhantering char *strerror(int errnum); /*deklarerad i string.h*/ Returnerar en teckensträng som beskriver ett angivet felnummer eller ”unknown error message” om felnumret är okänt. Exempel 1: printf(”Felmeddelande nr %d betyder ’%s’, 1, strerror(1)); Ger skärmutskriften: ”Felmeddelande nr 1 betyder ’Operation not permitted’” Exempel 2: errno = 1; perror(”Felmeddelandeförklaring”); Ger skärmutskriften: ”Felmeddelandeförklaring : Operation not permitted”


Ladda ner ppt "Jonny Karlsson 6.9.2005 PROCESSPROGRAMMERING Föreläsning 2 (6.9.2005) Innehåll: -Fildeskriptorer -Filhantering -Felhantering."

Liknande presentationer


Google-annonser