Presentation laddar. Vänta.

Presentation laddar. Vänta.

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

Liknande presentationer


En presentation över ämnet: "Jonny Karlsson 5.2.2008 1 PROCESSPROGRAMMERING Föreläsning 1 (5.2.2008) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering."— Presentationens avskrift:

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

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

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

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

5 5Jonny Karlsson 5.2.2008 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*/ Fildeskriptorer

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

7 7Jonny Karlsson 5.2.2008 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

8 8Jonny Karlsson 5.2.2008 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

9 9Jonny Karlsson 5.2.2008 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);

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

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

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

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

14 14Jonny Karlsson 5.2.2008 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


Ladda ner ppt "Jonny Karlsson 5.2.2008 1 PROCESSPROGRAMMERING Föreläsning 1 (5.2.2008) Innehåll: -Introduktion av kursen -Program och processer -Fildeskriptorer -Filhantering."

Liknande presentationer


Google-annonser