Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Procestræ under afvikling af cp init login shell cp cp src dest.

Lignende præsentationer


Præsentationer af emnet: "Procestræ under afvikling af cp init login shell cp cp src dest."— Præsentationens transcript:

1 Procestræ under afvikling af cp init login shell cp cp src dest

2 Filer 1. Hvad er filer ? 2. Formål ? 3. Navngivning ? 4. Indre struktur ? 5. Ydre attributter ? 6. Brug ?

3 Formål med filer Lagring af data med persistens stor kapacitet tilgængelighed

4 Navngivning Syntaks for filnavne: maks. antal tegn ? forbudte tegn ? Filnavn = sti absolut stinavn relativt stinavn i forhold til arbejdskatalog Når processer arbejder med filer: filnavn bruges ved åbning af fil derefter bruges en form for reference til filen (eks.: in ) FileInputStream in = new FileInputStream("/home/jens/src"); byte b = in.read();

5 Aktuelt katalog Alle processer har et aktuelt katalog Nye processer fødes med forælder-processens aktuelle katalog pwd Udskriver stinavn for det aktuelle katalog ls Lister filerne i det aktuelle katalog cd Dir Ændrer det aktuelle katalog cp src dest cp-processen overtager aktuelt katalog fra shellen

6 Indre struktur af filer Unix: En fil er en sekvens af bytes. Software udenfor operativsystemet bruges til at tolke disse bytes som f.eks. heltal tegn tekststrenge træer FileInputStream in = new FileInputStream("/home/jens/src"); byte b = in.read(); char c = (char)in.read;

7 Attributter Information om filen Ikke en del af filen ls -l *.java -rw-rw-r--.. nielsj.. 331.. Sep 6 17:41 Tolkning.java Adgang user/group/other ownerbytessidste ændringfilnavn chmod u+x Tolkning.java ls -l Tolkning.java -rwxrw-r--..

8 Input og output - hvordan kommer data til/fra processer filer proces parametre standard input standard output standard error besked- køer sockets... environment- variable

9 Input og output til ls filer ls parametre standard input standard output standard error besked- køer sockets... "-l" "Tolkning.java""-rwxrw-r--.." Filattributterne læses i det aktuelle katalog

10 Shellen kan omdirigere standard i/o ls -l Tolkning.java > slide.txt filer ls besked- køer sockets... "-rwxrw-r--.." slide.txt

11 cp cp src dest Input til cp: - tekststrengene src og dest overføres som parametre - filen src åbnes og er "almindeligt" input Output for cp: - filen dest skabes og er almindeligt output. - standard error bruges til div. fejlrapportering - standard output kan bruges til at vise hvilke filer der kopieres

12 Brug af systemkald i cp open(src,..); open(dest,..); while (..) { read(..,src,..); write(..,dest,..); } close(src); close(dest); OBS Pseudokode !

13 Hello World i C // Filnavn: hello.c #include main() { printf("Hello World \n"); } Kommentarer indlejres med //.. eller /*.. */ som i Java. Der skal være en main-funktion til at starte programudførelsen. #include er et direktiv der kopierer den angivne fil ind i filen. #include betyder at stinavnet er relativt til visse systemkataloger, som C-oversætteren kender. #include "navn" betyder at stinavnet først tolkes som relativt til det hello.c's katalog, dernæst som. Direktiver udføres af præprocessor.

14 Struktur af C-programmer #define BUF_SIZE 4096; char buf[BUF_SIZE]; void main(..) {.. while (..) {.. in = read(src,buf,BUF_SIZE);.. }.. } En C-kildetekstfil ("oversættelsesenhed") indeholder: erklæringer af funktioner (jf. metoder i Java) den enkelte fil behøver ikke indeholde erklæring af en main-funktion direktiver (#include, #define) til præprocessoren erklæringer af globale ("eksterne") variable

15 Erklæring af funktioner hello.c (jf. Kernighan/Ritchie): main() {..} cp.c (jf. Tanenbaum): void main(int argc,char *argv[]) {..} void er redundant og præciserer at funktionen ikke har returværdi. argc har samme værdi som args.length() i Java char *argv[] er en erklæring af argv som (hold fast !): et array af tegn-pointere = et array af strenge

16 Prototyper for funktioner Tanenbaum: void main(int argc, char *argv[]); // prototype.. void main(int argc, char *argv[]) { int src, dst,…; // selve funktionen } I programteksten skal funktioner være erklæret før de kaldes, enten ved den egentlige erklæring eller ved en prototype. Prototypen skal angive samme signatur, typer af parametre og eventuel returværdi, som den egentlige erklæring, mens navne på parametre er ligegyldige (og kan udelades). Prototyper anbringes meget ofte i såkaldte header-filer (.h). Prototypen i Tanenbaums program er redundant.

17 exit() Tanenbaum: void main(..) {.... exit(1); // oops.. exit(0); } Udførelse af exit() terminerer program (modsat return der blot terminerer den aktuelle procedure). Parameter-værdien X til exit(X) overføres til forældre-proces (skal "spørge" til den). Konvention: 0 = succes Alt andet = fejl, talværdi indikerer hvilken. Kun for main: exit(X) svarer til return X.

18 Systemkaldet open() int src = open(argv[1],O_RDONLY); tjekker rettigheder finder filen returværdi er fildeskriptor, der bruges som indgang i tabel med information om processens åbne filer. O_RDONLY fortæller at filen kun skal læses O_RDONLY repræsenterer et tal (bitmønster) (er defineret ved #define O_RDONLY TAL )

19 Cp alt i alt - read/write til/fra array af tegn #define BUF_SIZE 4096;.. char buf[BUF_SIZE];.. void main(..) {.. src = open(..); if (src < 0) exit(2); dest = open(..); if (dest < 0) exit(3); while (1) { in = read(src,buf,BUF_SIZE); if (in <= 0) break; // blev der læst mindst 1 byte ? out = write(dest,buf,in); // break hopper ud af løkken if (out <= 0) break; } close(..); close(..); exit(0); }

20 Hvorfor er cp skrevet i C ? C er hurtigere end f.eks. Java, bl.a. til håndtering af arrays. C har grænseflade til systemkald, som både er (rimelig) brugervenlig og giver mulighed for at specificere de relevante parametre (antal tegn som ønskes læst etc.).

21 Kontekstskift under afvikling af cp cp - open - cp - open - cp - read - cp - write - cp - read - write … …. cp - read - cp - write - cp - close - cp - close - cp


Download ppt "Procestræ under afvikling af cp init login shell cp cp src dest."

Lignende præsentationer


Annoncer fra Google