1 / 14

PROCESSPROGRAMMERING

PROCESSPROGRAMMERING. Föreläsning 1 (5.2.2008) Innehåll: Introduktion av kursen Program och processer Fildeskriptorer Filhantering Kommonoradbaserade rörledningar Felhantering. Introduktion av kursen. Omfattning: 5 sp Rekommenderat studieår: 2

olga-curry
Download Presentation

PROCESSPROGRAMMERING

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PROCESSPROGRAMMERING Föreläsning 1 (5.2.2008) Innehåll: Introduktion av kursen Program och processer Fildeskriptorer Filhantering Kommonoradbaserade rörledningar Felhantering Jonny Karlsson 5.2.2008

  2. Introduktion av kursen Omfattning: 5 sp Rekommenderat studieår: 2 Lärare: Jonny Karlsson (hemsida: http://people.arcada.fi/~karlssoj) Kursens hemsida: http://people.arcada.fi/~karlssoj/procprog Kurspresentation: Se kursens hemsida Jonny Karlsson 5.2.2008

  3. Program och processer Ett program är en exekverbar (”körbar”) fil som finns lagrad t.ex. på en dators hårdskiva. När ett program exekveras läses programmets instruktioner först in till datorns minne där instruktionerna sedan en efter en exekveras. En process är en exekverande instans av ett program. Varje exekverande process i et UNIX system identifieras med en unik process ID nummer. Jonny Karlsson 5.2.2008

  4. Fildeskriptorer En fildeskriptor är ett positivt heltal som kerneln använder för att identifiera de filer som hanteras av en specifik process. M.a.o. en process kommer åt en viss fil i filsystemet via en fildeskriptor. Jonny Karlsson 5.2.2008

  5. Fildeskriptorer EXEMPEL printf(”hej”); /*skriver ut text till deskriptorn stdout (skärmen)*/ fprintf(stdout, ”hej”); /*samma*/ write(1, ”hej”, 3); /*samma*/ scanf(”%s”, text); /*läser in en teckensträng från deskriptorn stdin*/ fscanf(stdin, ”%s”, text); /*samma som ovan*/ read(0, text, sizeof(text)); fprintf(stderr, ”hej”) /*skriver ut text till deskriptorn stderr (skärmen) */ write(2, ”hej”, 3); /*samma*/ Jonny Karlsson 5.2.2008

  6. Filhantering 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 Jonny Karlsson 5.2.2008

  7. 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_APPEND Skriver till slutet på en fil, O_CREAT Skapar filen om den inte existerar. Kräver ett tredje argument som anger filrättigheterna för den skapdade filen. O_TRUNC Skriver över innehållet i en fil. O_EXECL Skapar ett felmeddelande tillsammans med O_CREAT ifall filen existerar. O_NONBLOCK Öppnar i ”icke-blockerande läge. O_SYNC Tvingar write funktionen att vänta på en fysisk I/O – operation Jonny Karlsson 5.2.2008

  8. Filhantering Mode S_IRUSR user - read S_IWUSR user – write S_IXUSR user - ececute S_IRGRP group - read S_IWGRP group - write S_IXGRP group - execute S_IROTH other - read S_IWOTH other - write S_IXOTH other - execute Jonny Karlsson 5.2.2008

  9. Filhantering Exempel: int deskr; deskr = open(”testfil.txt”, O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR); Ö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); Jonny Karlsson 5.2.2008

  10. 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*/ Jonny Karlsson 5.2.2008

  11. 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*/ Jonny Karlsson 5.2.2008

  12. 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]. Jonny Karlsson 5.2.2008

  13. 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” Jonny Karlsson 5.2.2008

  14. Kommandoradsbaserade rörledingar Rörledningar (Pipes) är i UNIX ett sätt att överföra data mellan exekverande processer. Kommandoradsbaserade rörledningar är ett exempel på använding av rörledngar. Kommandot Program1|Program2 skickar innehållet i stdout från process1 till deskriptorn stdin i Process2 Meddelanden som skickas till deskriptorn stdout i Process1 visas ej på bildskärmen Meddelande till bildskärmen från Process1 är möjligt via deskriptorn stderr Jonny Karlsson 5.2.2008

More Related