read Systemanrop i UNIX Exempel med read & write write int antal_tkn, fd, count; char buffer[size]; antal_tkn = read(fd, buffer, count);
|
|
- Sara Bergman
- för 9 år sedan
- Visningar:
Transkript
1 i UNIX read!filhantering!read!write!open!close!creat!lseek!dup!fcntl!pipe!processhantering!exec!exit!fork!getpid!kill!signal!wait! Funktionen read läser från en fildeskriptor och returnerar antalet lästa tecken. int antal_tkn, fd, count; char buffer[size]; antal_tkn = read(fd, buffer, count);! antal_tkn: Antal tecken som lästs! fd: Fildeskriptor! count: Antal tecken som skall läsas åt gången! buffer: Teckenbuffer 1 2 write Exempel med read & write! Funktionen write skriver till en fildeskriptor och returnerar antalet skrivna tecken. int antal_tkn, fd, count; char buffer[size]; antal_tkn = write(fd, buffer, count);! antal_tkn: Antal tecken som skrivits! fd: Fildeskriptor! count: Antal tecken som skall skrivas åt gången! buffer: Teckenbuffer #include <unistd.h> #define COUNT 1024 #define STDIN 0 #define STDOUT 1 int main(void) { int antal_tkn; char buffer[count]; while((antal_tkn = read(stdin, buffer, COUNT)) > 0) write(stdout, buffer, antal_tkn); return 0; 3 4!1
2 open! Funktionen open öppnar och möjligtvis även skapar en fil och returnerar den nya fildescriporn. int fd, flaggor, mode; char *sökväg; fd = open(sökväg, flaggor, mode);! Mode anger accessrättigheter, exempelvis 0644! Flaggor anger hur filen skall öppnas, exempelvis:! O_CREAT Om filen inte finns, skapas den! O_TRUNC Om filen finns trunkeras den! O_RDONLY Öppna endast för läsning! O_RDWR Öppna för läsning och skrivning creat! Funktionen creat är ekvivalent att använda open med flaggorna satta till! O_CREAT O_WRONLY O_TRUNC int fd = creat(char *namn, int PERMS);! PERMS anger accessrättigheter som kan anges:! Oktalt exempelvis 0644! Bitvist separerade med OR, exempelvis! S_IWUSR Ägaren har write-rättighet! S_IRGRP Gruppen har read-rättighet! S_IROTH Alla andra har read-rättighet 5 6 Prestandatest med buffersize #define COUNT 1 /* eller 1024 */ int num, in_fd, ut_fd; in_fd = open("in_data.txt", O_RDONLY); ut_fd = open("ut_data.txt",o_wronly); while((num = read(in_fd, buffer, COUNT)) > 0) write(ut_fd, buffer, num); close(in_fd); close(ut_fd); 7 Resultat av prestandatest! Efter kopiering av 5Mb uppmättes följande resultat: bytes 1 byte! Vi kan alltså konstatera stora skillnader! I ett stort system blir detta exponentiellt värre!! Slutsats: Kodeffektivisering är mycket viktigt! Tid CPU Utnyttjande 8!2
3 unlink! Funktionen unlink tar bort en fil genom att räkna ner antalet referenser (link count) till filen. När antalet referenser är 0 är filen borttagen.! Om två personer har samma fil öppen tas den med andra ord inte bort förrän båda personerna gjort unlink på filen. char *filnamn; unlink(filnamn); lseek! Funktionen lseek används för att förflytta filpekaren i en fil. int fd, startpos; long offset, nypos; nypos = lseek(fd, offset, startpos);! Offset: anger förflyttningen i bytes relativt origin! startpos: anger utgångspositionen! 0 = filens början! 1 = aktuell position! 2 = filens slut 9 10 fork! et fork används för att starta upp en ny process.! Den nya processen kallas barnprocess och ursprungsprocessen för föräldraprocess.! Barnprocessen är en kopia av föräldraprocessen! Dessa två kommer att exekvera samtidigt och deras exekvering brukar styras av if-satser fork() Föräldraprocess Barnprocess Exempel 1 med fork #include <stdio.h> #include <unistd.h> int pid; pid = fork(); printf("pid: %d\n", pid); if(pid == 0) printf( Jag är ett barn.\n ); if(pid > 0) printf( Jag är en förälder.\n ); if(pid < 0) printf( Anropet misslyckat.\n ); return 0; 11 12!3
4 Exempel 2 med fork #include <stdio.h> #include <unistd.h> int pid; pid = fork(); pid = fork(); Exempel 3 med fork #include <stdio.h> #include <unistd.h> int pid, i=0; if((pid = fork()) == 0) i=1; printf("pid: %d\n", pid); return 0; printf("pid: %d, i=%d\n", pid, i); return 0; Exempel 4 med fork #include <stdio.h> #include <unistd.h> Exempel 5 med fork int fd, stat; char buffer[10]; while(1) fork(); return 0; Gör (helst) inte detta experiment eftersom datorn blir sänkt redan efter ett par sekunder! fd = open("datafile", O_RDONLY); read(fd, buff, 10); printf("före fork(): %d\n", lseek(fd, 0L, SEEK_CUR)); switch(fork()) { case 0: printf("barn före read: %d\n", lseek(fd, 0L, SEEK_CUR)); read(fd, buff, 10); printf("barn efter read: %d\n", lseek(fd, 0L, SEEK_CUR)); default: break; wait(&stat); printf("förälder efter wait: %d\n", lseek(fd, 0L, SEEK_CUR)); 15 16!4
5 getpid! Funktionen getpid returnerar det process-id som den aktuella processen har. Exempel med getpid int pid; int pid; pid = getpid();! Getpid kan bland annat användas för att generera temporära filnamn. pid = fork(); if(pid == 0) printf( Barnets PID=%d\n", getpid()); else if(pid > 0) printf( Förälderns PID=%d\n", getpid()); else perror( Kunde inte skapa en ny process"); execl Exempel 1 med execl! et execl ersätter exekveringen av nuvarande process med en ny process.! execl används för att starta upp ett program. #include <stdio.h> #include <unistd.h> execl( path/to/program, argument, NULL)! Olika varianter på execl är:! execlp execl ("/bin/date", "date", --help", NULL); perror ( Kunde ej skapa process");! execle! execv! execvp! execve 19 20!5
6 Exempel 2 med execl int pid, status; if((pid = fork()) == 0) { execl("/usr/bin/cal", "cal", "10", "2000", NULL); perror("kunde inte skapa process\n"); else if(pid > 0) { wait(&status); printf("föräldern har avslutat\n"); wait! Funktionen wait används för att få en föräldraprocess att vänta på att dess barn skall avsluta sin exekvering. int pid, status; pid = wait(&status);! pid: Process-id på barnet som avslutade! status: Barnprocessens exit-status, som exempelvis kan vara terminate, abort, core-dump osv waitpid Exempel med waitpid! Till skillnad från wait används waitpid till att invänta en specifik barnprocess. int pid, status, options waitpid(pid1, &status, options);! pid: Process-ID som skall väntas in! status: Barnprocessens exit-status! options: Tillval definierade i filen sys/wait.h Normalt används WNOHANG int pid, status; switch(pid = fork()) { case 0: puts("barnet sover"); sleep(5); puts("barnet terminerar"); default: break; while(waitpid(pid, &status, WNOHANG) == 0) { puts("föräldern väntar..."); sleep(1); puts("föräldern terminerar"); 23 24!6
7 Processgrupper! Varje process har inte bara ett process-id, utan även ett process-grupps-id, pgid.! Detta ID-nummer berättar vilken processgrupp som processen tillhör.! Processer kan via kommandoraden grupperas med hjälp av pipes ( )! Det är ibland bra att använda sig av processernas grupp-id eftersom man kan behandla hela processgruppen som en enhet, om man exempelvis vill skicka en signal till den.! I normalfallet går en signal bara till en process. Exempel med processgrupper prog1 prog2 & prog3 prog4 prog5 Login-skal prog1 prog2 prog3 prog4 Processgrupp Processgrupp prog5 Processgrupp Session getpgrp! Funktionen getpgrp returnerar det processgrupps- ID en process tillhör. int pgid = getpgrp(); eller int pgid = getpgid(0);! pgid: Den processgrupp processen tillhör setpgid! Funktionen setpgid ändrar processgrupps-id för en process. setpgid(int pid, int pgid);! pid: Processen man vill byta grupp på! pgid: Den nya processgruppen! Om pid=0 Används den anropade processens pid! Om pgid=0 Blir pgid samma som pid! Om pid=pgid Blir processen group leader 27 28!7
8 Exempel: Processers returvärden nice int pid, status, exit_status; switch(fork()) { case 0: exit(99); default: break; pid = wait(&status); if(wifexited(status)) { exit_status = WEXITSTATUS(status); printf("exit-status från %d var %d\n", pid, exit_status); printf("processgrupp: %d\n", getpgrp());! Funktionen nice ändrar prioriteten på en process nice(int priority);! Priority är den prioritetsändring som processen skall få.! Detta är ett värde mellan 0 och 99.! Högre tal=lägre prioritet! Endast root kan sätta negativ prioritet, dvs öka processens prioritet chdir! Med systemanropet chdir kan man förflytta sig i filsystemet. char *dir = "/usr/bin/"; chdir(dir); fd = open( testfil, O_RDWR O_CREAT); write(fd, "Hej", 3); close(fd);! dir Anger sökvägen till den katalog dit man vill förflytta sig. Miljövariabler! Miljövariabler används av systemet för att samla in data om sig själv.! En annan tillämpning är installationsprogram som kan behöva information om systemet, eller om man i ett program behöver viss information.! För att få fram miljövariablerna: int main(int argc, char *argv[], char *envp[]){ while(**envp) printf("envp: %s\n", *envp++); 31 32!8
9 Exempel: Miljövariabler! Några av alla miljövariabler som finns är: envp: PWD=/crille/C_Unix/environment envp: HOSTNAME=spock.cs.kau.se envp: MACHTYPE=i386-redhat-linux-gnu envp: LANG=sv_SE envp: SHELL=/bin/bash envp: USERNAME=crille envp: HOME=/home/crille envp: PATH=/usr/local/sbin:/usr/sbin:/usr/bin: getenv och setenv! Funktionerna getenv och setenv hämtar in respektive lägger till miljövariabler. char *värde = getenv(char *namn); setenv( VARIABELNAMN, värde, overwrite);! Exempel: setenv("frukost", "flingor", 1); printf("path = %s\n", getenv("path")); printf("frukost = %s\n", getenv("frukost")); pipe pipe i en process! Funktionen pipe skapar ett rör där data kan transporteras.! Detta rör har, som så många andra rör, två ändar.! I den ena änden skrivs data och i den andra läses det.! En pipe fungerar enligt FIFO. int pipe_fd[2]; pipe(pfd); pfd[0]: Pfd[1]: Fildescriptor för läsning Fildescriptor för skrivning write pipe read 35 36!9
10 Ex1: pipe i en process #define SIZE 17 char buffer[size]; int pfd[2], i; pipe(pfd); Ex2: pipe i en process #define MSG "Meddelande\n" int pfd[2], n; char buffer[100]; write(pfd[1], "Meddelande nr: 1\0", SIZE); write(pfd[1], "Meddelande nr: 2\0", SIZE); write(pfd[1], "Meddelande nr: 3\0", SIZE); for(i=0 ; i<3 ; i++) { read(pfd[0], buffer, SIZE); puts(buffer); pipe(pfd); printf( Läs fd:%d, skriv fd:%d\n", pfd[0], pfd[1]); write(pfd[1], MSG, sizeof(msg)); n = read(pfd[0], buffer, sizeof(msg)); write(1, buffer, n); pipe mellan två processer Ex1: pipe mellan två processer förälder barn int pfd[2]; char buffer[size]; write pipe read pipe(pfd); switch(fork()) { case 0: write(pfd[1], "Meddelande nr:1\0", 17); read(pfd[0], buffer, 17); printf("barn-buffer: %s\n", buffer); default: break; write(pfd[1], "Meddelande nr:2\0", 17); read(pfd[0], buffer, 17); printf("föräldra-buffer: %s\n", buffer); 39 40!10
11 Ex2: pipe mellan två processer int pfd[2]; char buffer[size]; pipe(pfd); switch(fork()) { case 0: close(pfd[0]); write(pfd[1], "Meddelande nr:1\0", 17); default: break; close(pfd[1]); read(pfd[0], buffer, 17); printf("föräldra-buffer: %s\n", buffer); Ex med oblockerad pipe void barn(int p[2]) { close(p[0]); for(i=0 ; i<3 ; i++) { write(p[1], Hejsan\0", 7); sleep(3); write(p[1], Hejdå\0", 6); pipe(pfd); fcntl(pfd[0], F_SETFL, O_NONBLOCK); switch(fork()) { case 0: barn(pfd); default: foralder(pfd); Ex med oblockerad pipe forts select void foralder(int p[2]) { int nread; char buffer[size]; close(p[1]); while(1) { switch(nread = read(p[0], buffer, 6)) { case -1: if(errno == EAGAIN) { printf("pipe'n är tom\n"); sleep(1); break; else exit(-1); case 0: printf("quit\n"); default: printf("msg=%s\n", buffer); 43! et select används för att söka efter förändringar på olika fildeskriptorer, ofta tillsammans med oblockerade pipes. int num_fds; fd_set *read_fds, write_fds, error_fds; struct timeval *timeout; select(num_fds, read_fds, write_fds, error_fds, timeout); 44!11
12 select fortsättning Exempel med select num_fds read_fds write_fds error_fds timeout Antalet fildeskriptorer vi vill lyssna på Kontrollerar om någon pipe vill läsa Kontrollerar om någon pipe vill skriva Kontrollerar om någon pipe har ett fel att rapportera Den tid (sek, eller millisek) select skall vänta innan den skall returnera. Om denna sätts till NULL väntar select tills något kommer. int fd1, fd2, n_fds; fd_set read_fds; fd1 = open( file1, O_RDONLY); fd2 = open( file2, O_RDONLY); n_fds = 5; //stdin + stdout + stderr + fd1 + fd2 FD_ZERO(&readset); FD_SET (fd1, &readset); FD_SET (fd2, &readset); switch(select(n_fds, &readset, NULL,NULL,NULL)) { dup! Kommandot dup används för att duplicera en fildeskriptor. Både den gamla och den nya fildeskriptorn refererar till samma fil efter anropet.! Den nya fildeskriptorn kommer att få det lägsta lediga numret. Första gången dup görs kommer den nya fildeskriptorn att få numret 3.! STDIN(0), STDOUT(1), STDERR(2). int old_fd, new_fd; new_fd = dup(old_fd); Exempel med dup int fd, stat; creat(utfil, PERMS); if(fork() == 0) { close(stdout); dup(fd); puts("hejsan!"); close(fd); wait(&stat); puts("föräldern avslutar"); 47 48!12
13 dup2! et dup2 skapar även den en kopia av en fildeskriptor.! Skillnaden mellan dup och dup2 är att dup2 även stänger den gamla fildeskriptorn om det är nödvändigt. int old_fd, new_fd; dup2(old_fd, new_fd); Exempel med dup2 int fd, stat; creat(utfil, PERMS); if(fork() == 0) { dup(fd, STDOUT); puts("hejsan!"); close(fd); wait(&stat); puts("föräldern avslutar"); fcntl! et fcntl används för att manipulera och ändra egenskaper för öppnade fildeskriptorer. fcntl(int fd, int CMD, int arg);! CMD anger kommandot som skall göras. Flera finns:! F_DUPFD Duplicera fildeskriptorer! F_GETFD Hämta fildeskriptorns flaggor! F_SETFD Sätt fildeskriptorns flaggor! F_SETLK Sätt lås på fildeskriptorn! F_GETLK Lås upp fildeskriptorn Exempel med fcntl int fd, stat, ny_ut; creat(utfil, PERMS); if(fork() == 0) { ny_ut = dup(stdout); close(stdout); dup2(fd, STDOUT); puts("hejsan!"); fflush(stdout); close(stdout); fcntl(ny_ut, F_DUPFD, STDOUT); puts("barnet avslutar"); wait(&stat); puts("föräldern avslutar"); 51 52!13
14 signal! En signal kan ses som ett meddelande till en process att en händelse har inträffat.! Signaler kallas även för Software interrupts.! Alla signaler har ett namn, se man-sidan eller <signal.h> int sig, hanterare; signal(sig, hanterare);! sig Signalen som skall skickas! hanterare Kan vara SIG_IGN, som talar om att ignorera signalen, eller en egen funktion att hantera signalen. Signal-genererare! Signaler kan genereras på ett flertal olika sätt! kill! Kommando kill! Tangentbord CTRL+C (SIGINT) CTRL+\ (SIGQUIT) CTRL+Z (SIGSTF)! Hårdvara Referens utanför minne (SIGEGV)! Mjukvara Out-of-bound data (SIGURG) Exempel med signal #define SEC 1 void hanterare() { puts("du har tryckt CTRL+\"); signal(sigint, SIG_IGN); signal(sigquit, hanterare); while(1) sleep(sec); return 0; zombie! En zombie är en process som ingen längre har kontroll över.! Zombies skapas då! Ett barn dör och föräldern inte väntar på barnet! En förälder terminerar då dess barn fortfarande exekverar! Hur man undviker att få zombies:! waitpid waitpid(pid, &status, WNOHANG);! signaler olika beroende på implementation, exempelvis SysV signal(sigcld, SIG_IGN) POSIX signal(sigchld, SIG_IGN); 55 56!14
15 kill! et kill används för att skicka en signal till en process. kill(int pid, int signal); Om pid = 0 Skickas signalen till hela processgruppen Om pid =-1 USER=root Skickas signalen till alla processer annars Skickas signalen till användarens alla processer. Om pid <-1 Skickas signalen till hela processgruppen, utom avsändarprocessen Exempel med kill int pid, status, sig_nummer; switch(pid = fork()) { case 0: sleep(10); default: break; kill(pid, SIGTERM); pid = wait(&status); if(wifsignaled(status)) { sig_number = WTERMSIG(status); printf("signal %d terminerade barnet %d",sig_nummer, pid); Andra signalfunktioner! raise skickar en signal till sig själv. Ekvivalent med kill(getpid(), signal). Exempel: raise(int sig);! alarm används för att starta en timer som skickar iväg en signal efter en viss tid. Alarm fungerar som sleep, med den skillnaden att systemet under tiden kan nyttjas. Exempel: alarm(3);! pause suspenderar en process (för att inte slösa CPU) till dess att en signal mottages. Exempel: pause(); 59!15
Information OPERATIVSYSTEM UNIXPROGRAMMERING
Information OPERATIVSYSTEM UNIXPROGRAMMERING Lärare: Reine Lundin Rum: 5A 429 E-post: reine.lundin@kau.se Hemsida: www.cs.kau.se/~reine/ Telefon: 700 18 60 Laborationer Append (filhantering) Med Systemanrop.
... Funktionsanrop. Vad händer när man kör ett program?
Vad händer när man kör ett program? När man kompilerar ett program och sedan länkar ihop det så stoppar länkaren in lite extra kod i programmet. Det är denna kod som i sin tur anropar main-funktionen ungefär
Möte 10: Kommunikation mellan processer - (PI)
Möte 10: Kommunikation mellan processer - (PI) Målet med att köra flera processer är ofta att få dem att samverka, som sagt, men för att få dem att samverka måste de ofta kommunicera. Vi ska studera processkommunikation
Grundprogrammen. combine
Seminarium II Andra seminariet behandlar speciella övningsuppgifter som gavs ut på kurswebben tidigare. Programmen som presenteras är förlag till lösningar på övningsuppgifterna. Genomgående används systemanropet
printenv sort pager printenv grep args sort pager
1 Problembeskrivning Uppgiften var att skriva ett program, digenv för att visa miljövariabler. programmet vara ekvivalent med att köra: Kört utan argument så skulle printenv sort pager och kört med argument
Användbara systemanrop och biblioteksfunktioner. 2G1520 Operativsystem
Institutionen för Mikroelektronik och Informationsteknik Användbara systemanrop och biblioteksfunktioner 2G1520 Operativsystem 2005 Institutionen för Mikroelektronik och Informationsteknik 1.0 Introduktion
Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet
Vad händer när man kör ett program? Program och processer När man kompilerar ett program och sedan länkar ihop det så stoppar länkaren in lite extra kod i programmet. Det är denna kod som i sin tur anropar
HI1025 Operativsystem, KTH Haninge, VT2012
Del 2 av kursen: Systemprogrammering. Tillfälle 5 (F): Introduktion till programmering med parallella processer: fork(), wait(), exit(), getpid(), getppid(), execl(), execvp(). 1. Parallella processer
Möte 9: Relationer mellan körande processer - (PI)
Möte 9: Relationer mellan körande processer - (PI) Målet med att köra flera processer är ofta att få dem att samverka. Vi ska idag studera olika sätt att får processer att samverka. En viktig form av samverkan
Signaler. Icke tillförlitliga signaler. Vad göra?
Signaler Signaler Signaler kan betecknas som mjukvaruavbrott och du kan välja om du vill ta hand om dessa signaler eller strunta i dem. De funkar på ungefär samma sätt som hårdvaruavbrott och du kan definiera
Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)
Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI) Som sagt så kommer den här kursen endast innehålla en enda föreläsning och det var förra gången. Från och med nu så kommer vi förutsätta
Del II: Systemprogrammering och Inter-Process Communication.
Möte 6 (Föreläsning 2) HI1025 Operativsystem 7.0 hp, KTH Haninge, VT2017 Del II: Systemprogrammering och Inter-Process Communication. Vi repeterar ett antal preciseringar: * En fil är en abstraktion som
2... uppvisa förmåga att skapa och/eller hantera flerprocessiga program där de ingående processerna ges
UPPGIFTER AV FÖRESLAGEN TENTAMENSKARAKTÄR, LÅTSASTENTA DEN 27 FEBRUARI 2017 Inför datortentan III Detta är tredje dokumentet i en följd av dokument som med syfte att klargöra kursmål och examinationsformen
Programmeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser
Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012
Tentamen Systemnära programmering, 7.5hp 5 november 2012 Skrivtid: 9 13 Hjälpmedel: EN av följande böcker Bilting & Skansholm: Vägen till C ELLER J.R. Hanly & E.B. Koffman: C Program Design for Engineers
Raspberry Pi och Tellstick, ett program i C.
Raspberry Pi och Tellstick, ett program i C. Ett program skrivet i C för att med Tellstick tända och släcka en eller flera lampor. Programmet startas med kommandot: /home/pi/development/cprog/tellstick/tellstick-13
Operativsystem ID1200/06 Tentamen :00-18:00
Operativsystem ID1200/06 Tentamen 2018-01-12 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,
Pekare och arrayer. Indexering och avreferering
Pekare och arrayer En array är ett sammanhängande minnesområde rymmande ett antal element av en viss typ. Arraynamnet kan ses som adressen till arrayens början, dvs. dess första element. En pekare är en
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas
Operativsystem ID2200/06 omtentamen :00-12:00
Instruktioner Operativsystem ID2200/06 omtentamen 2017-08-21 8:00-12:00 Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,
#include <pthread.h> #include <stdio.h> int p1[2]; void* char_print (void* parameter) { int fds; fds = *((int *)parameter); int i;
Övningar på trådar Det kommer att visa sig att det är mycket enklare att programmera med trådsom pratar med pipes/sockets ar när man en gång bemästrat IPC med processer och pipes/sockets. Vi ska dock formulera
Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00
Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp 2018-04-03 14:00-18:00 Omtentander på ID2200 TEN1 3.8 hp och ID2206 TEN1 4.5 hp skall inte skriva denna tentamen! Instruktioner Du får, förutom
Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal
Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2018-04-0 Lokal G6 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal uppgifter 5 Antal sidor 16 (inklusive
Strängar. Strängar (forts.)
Strängar En sträng i C är helt enkelt en array av char: char namn[20]; För att få strängar att bete sig som om de vore av dynamisk längd markeras strängens slut med null-tecknet \0 : J o z e f S w i a
Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 12 Filhantering Funktionsbibliotek Mer om kompilering Lagrinsklasser Makron Programmeringsteknik VT05 2 Mer om printf Utskrifter
(2) Skriv ett program som skapar ett antal processer vars relationer beskrivs av nedanstående tidsdiagram a
Tentamen i Operativsystem, HI1025:LAB1-15 mars, 2017 Allmänna instruktioner. Tentamen innehåller 3 programmeringsproblem av den art vi exemplifierat på seminarier och i övningar. För godkänt betyg ska
Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00
Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp 2018-04-03 14:00-18:00 Omtentander på ID2200 TEN1 3.8 hp och ID2206 TEN1 4.5 hp skall inte skriva denna tentamen! Instruktioner Du får, förutom
Övning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas
Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp().
Om pekare och minneshantering i C, relaterat till operativsystem och särskilt konstruktionen fork() execvp(). Detta extra material är tänkt att dels fördjupa och förtydliga pekarbegreppet från C och ge
Operativsystem (ID2200/06) XX XX:00-XX:00
Operativsystem (ID2200/06) 2017-01-XX XX:00-XX:00 Namn: Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4-sida med anteckningar. Mobiler etc skall lämnas till
Tellstick-15.c. Kompilering av programmet: gcc -o tellstick-15 -Wall -ltelldus-core -W -O2 -s -pipe -lm tellstick-15.c
Tellstick-15.c Ett program skrivet i C för att med Tellstick tända och släcka en eller flera lampor. Det nya i detta program är att strömbrytare 1 tänds och släcks efter solens upp- och nedgång, tänds
Tillfälle 14 (F): Fördjupat studium av parallellitet och synkronisering: processer, trådar, schemaläggning och signaler.
Tillfälle 14 (F): Fördjupat studium av parallellitet och synkronisering: processer, trådar, schemaläggning och signaler. Mer kring trådar och processer Vi har nu erfarenhet av både trådar och processer.
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler
Fö 4 TSEA81 Monitors and Message passing Condition variables - händelsevariabler Kan användas för att implementera villkorliga kritiska regioner Tre operationer: Initiering(C, S) interna data för villkorsvariabeln
Lärare och handledare. Systemnära programmering. I dag. Föreläsningar & Gruppövningar & Handledning. Marcus Karlsson
Lärare och handledare Systemnära programmering 5DV088 HT10 Föreläsningar & Gruppövningar & Handledning Mikael Rännar Handledning mr@cs.umu.se Marcus Karlsson marcusk@cs.umu.se 1 2 I dag Information om
Fö 4 TSEA81. Monitors and Message passing
Fö 4 TSEA81 Monitors and Message passing Condition variables - händelsevariabler Kan användas för att implementera villkorliga kritiska regioner Tre operationer: Initiering(C, S) interna data för villkorsvariabeln
Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning
Generell säkerhet Här finns det inga direkta rätt eller fel. Snarare saker man bör tänka på när man implementerar ett program. Kort sagt: Efter att du kommit på hur du tänkt göra, sov på saken och tänk
Avancerad SSL-programmering II
Tekn.dr. Göran Pulkkis Överlärare i Datateknik Avancerad SSL-programmering II 1 Innehåll Makron för generisk stackhantering Hantering av konfigureringsfiler Certifikathantering 2 1 Makron för generisk
Utkast. Programmering. Signals. Olika typer av program. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Avbrott i mjukvara.
Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes Utkast Avbrott i mjukvara Larm signaler Avslutnings signaler IDE-sektionen Curses Juli 2 Olika typer av program Signals
Process- programmering
Process- programmering höstterminen år 2002 socket() socket() bind() connect() listen() accept() inkoppling väntar på klient read() anrop write() write() svar read() Sida 1/38 INNEHÅLL Kommandorad rörledning
lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck
input läs tecken stoppa tillbaka ett tecken skicka ett token och dess attribut parser Eliminera white space och kommentarer Gruppera lästa tecken till tokens identifierare, nyckelord, numeriska konstanter,
*Pekarvärden *Pekarvariabler & *
*Pekarvärden *Pekarvariabler & * Motivering Pekare är ett fundamentalt koncept i C (och C++) Multipla returvärden från funktioner. Arrayer hanteras via pekare Dynamiskt minne (kommer i slutet av kursen)
Tentamen *:58/ID100V Programmering i C Exempel 3
DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst
Operativsystem ID1200/06 Tentamen :00-18:00
Operativsystem ID1200/06 Tentamen 2018-01-12 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,
Introduktion till processer
Grundläggande begrepp HI1025 Operativsystem 7.0 hp, KTH Haninge, VT2017 Introduktion till processer Vi skriver ner ett par preciseringar av några begrepp som vi hittills stött på. * En fil är en abstraktion
Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek
Programbibliotek Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek Programbibliotek 1 Programbibliotek Programbibliotek 2 Programbibliotek
Poster ( structar ) Postdeklarationer
Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.
Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe
In- och utmatning i Unix Program i Unix skriver och läser till och från filer. En fil betyder här en vanlig fil med text eller binära data, ett tangentbord, en skärm, ett annat program etc. Innan ett program
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-01-11 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas
PC-teknik, 5 p LABORATION FILHANTERING
PC-teknik, 5 p LABORATION FILHANTERING Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2004-09-14 Laborant(er): 1 Syfte Laborationen ska illustrera möjligheten att använda funktioner i DOS för att
Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning
Generell säkerhet Här finns det inga direkta rätt eller fel. Snarare saker man bör tänka på när man implementerar ett program. Kort sagt: Efter att du kommit på hur du tänkt göra, sov på saken och tänk
Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe
Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK
Deluppgift 17 Processhantering: exec, sleep, exit, plist
Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson Deluppgift 17 Processhantering: exec, sleep, exit, plist Inledning För att få ett praktiskt
Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
Pekare ( )
Pekare Varje variabel har en adress En variabels adress ges av den unära adressoperatorn & Adresser hanteras kan lagras i variabler (pekarvariabel) Den unära avrefereringsoperatorn * används dels vid deklaration
Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19
Programmering i C++ EDA623 Strömmar och filer EDA623 (Föreläsning 9) HT 2013 1 / 19 Strömmar och filer Innehåll Klassen ios Läsning av strömmar Utskrift av strömmar Koppling av filer till strömmar Direktaccess
Realtidsstöd i Minix. En laborationrapport. Oktober 2012
Realtidsstöd i Minix En laborationrapport Karl Zylinski Hampus Gustafsson Oktober 2012 1 Innehåll 1 Introduktion 3 1.1 Problem................................ 3 1.1.1 Skapa ett testprogram....................
C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen
C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt
Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.
Vad har vi lärt oss så här långt Vad är en sträng Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar. Matriser av strängar. Sortering av strängar. Vad har vi lärt oss i dag Literals
Tentamen. Datorteknik och realtidssystem
Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2017-08-18 Lokal TER2 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 5 Antal sidor (inklusive
C-programmering, föreläsning 2 Jesper Wilhelmsson
C-programmering, föreläsning 2 Jesper Wilhelmsson Funktioner void Globala och lokala variabler, scope static Arrayer Strängar ASCII, ANSI Argument till main Slumptal Funktioner Nu är det dags att börja
En kort text om programmering i C.
En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,
Avancerad SSL-programmering I
Tekn.dr. Göran Pulkkis Överlärare i Datateknik Avancerad SSL-programmering I 25.1.2012 1 Innehåll SSL-sessioner Förnyad SSL-handskakning Blockerad/oblockerad in/uthantering 25.1.2012 2 SSL-sessioner Session
OS-X, ett distribuerat realtidsoperativsystem (C) Francis Görmarker 1994
OS-X, ett distribuerat realtidsoperativsystem (C) Francis Görmarker 1994 Detta dokument beskriver operativsystemet OS-X, ett kompakt, distribuerat realtidsoperativsystem för mikrodatorer. Innehåll 1.0
TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl
TDDIU81 Processer och trådar Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl Sammanfattning Den här rapporten innehåller en kort genomgång av allmän process och trådhantering
Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare
Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.
Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING
Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING 1. Träna på att logga in och ut. 2. Mata ln sleep 60. Mata in kommandot date direkt. Tryck på avbrottstangenten, (CTRL-C). Prova kommandot date
Föreläsning 13. In- och utmatning
Föreläsning 13 In- och utmatning Dagens kluring Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar
Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Tentamen i Programmering C, Fri, Kväll, 041211.
1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 19.00. Denna tenta kommer att vara färdigrättad Ti 14/12 och kan då hämtas på mitt tjänsterum,
Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek
Programbibliotek Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek Läsanvisningar: Arbetsbok kapitel 8 Programbibliotek 1 Programbibliotek
Språket Python - Del 2 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Funktioner Filhantering Felhantering 2 Funktioner 3 FUNKTIONER Att dela upp program Att dela upp program i mindre delar, funktioner är ett viktigt koncept i programmering. Viktigt
C++ Slumptalsfunktioner + switch-satsen
C++ Slumptalsfunktioner + switch-satsen Veckans avsnitt består av ett antal lite udda funktioner man kan ha nytta av när man skriver program. Det är en slumptalsgenerator och lite annat smått och gott.
Programmeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Öppna filer och filsystem i PintOS Hemuppgift TDDI81, 21/
Öppna filer och filsystem i PintOS Hemuppgift TDDI8, /0-03 Almquist Mathias (matal09) Nguyen Johan (johng86) Hamzic Mirza (mirha348) Timliden Erik (eriti930) INLEDNING PintOS är ett operativsystem utvecklat
Operativsystem ID2200/06 omtentamen :00-12:00
Instruktioner Operativsystem ID2200/06 omtentamen 2017-08-21 8:00-12:00 Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,
Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning
Övning 3 i 2D1324 Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Avancerad c-programering och repetition Typisk h-fil #ifndef special_a
Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok
Namn: Laborationen godkänd: Laboration 2. Cacheminne Laborationens syfte I laborationen ska du bekanta dig med cacheminnen. Genom laborationen fås kunskap om hur cacheminnen är konstruerade och hur de
Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen
Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för
Lab 7, 48 steg till ett bättre liv i Unix-labbet
Lab 7, 48 steg till ett bättre liv i Unix-labbet Urban Liljedahl 13 december 2002 Instruktioner Mål Krav Utveckla förmågan att söka kunskap med hjälp litteratur och andra källor. Utveckla förmågan att
Typkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
(Lösningsförslag finns sist i denna fil.)
(Lösningsförslag finns sist i denna fil.) Läser externa signaler. Har 64 ingångar (kanaler), från 0 till 63. Kan bara avläsa en ingång i taget. Avlästa värdet positivt 16-bitars tal. Varje läsning tar
Operativsystem ID2200/06 omtentamen :00-18:00
Instruktioner Operativsystem ID2200/06 omtentamen 2017-12-18 14:00-18:00 Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Svaren skall lämnas på dessa sidor,
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00
Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-01-11 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas
Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:
Länkade listor i C Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till: Dynamiskt allokerad array Arrayer allokerade på stacken Kan alltså användas till att
Programmering i C, 7,5 hp
Programmering i C, 7,5 hp Föreläsning 4 VÄLKOMNA! 31 switch-satsen Antag att vi har en heltalsvariabel a som skall styra programflödet Antag vidare att a kan anta tex 5 olika värden 1,2,3,4,5 printf( Mata
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Strömmar, externa filer och kommandoradsargument Eric Elfving Institutionen för datavetenskap 7 oktober 2015 Översikt 2/32 Strömmar Kommandoradsargument Jämförelseoperatorer
Sockets. Processkommunikation Sammanfattning. Sockets. Domän, typ och protokoll
Processkommunikation Sammanfattning Pipes Kan användas då processerna har en gemensam föräldraprocess. Tillgängligt överallt FIFO Som pipor fast processerna behöver inte ha någon gemensam förälder. XSI
BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X
Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen
#include <stdio.h> #include <string.h>
#include #include void fun(char s[]) int i=-1; while(s[++i]!=0) if('a'
Enkla datatyper minne
Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in
Och!efter!ca!20!omgångar!hamnade!den!på!en!stabil!konfiguration!enligt!nedan! där!den!stannar!kvar.!
Inlämningsuppgift5/GameofLife GameofLifeärettklassigtspel/emulator.Sistidokumentetserduemexempel kodskriveniprogrammetmatlab.skrivomprogrammeticiställetochstarta medattskrivaerainitialerpåspelbrädet.förmerinformationom
Tentamen i Introduktion till programmering
Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:
6.1 Kompilering och lite grundläggande information
6 Förhoppningsvis ska de C-konstruktioner som gås igenom här tillsammans med de exempelprogram som ges här och i andra delar av lab-pm vara tillräckliga för att ni ska kunna klara av laborationerna. Syftet
Programmering av grafisk display
Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, uppg. 5.10-5.16. Datablad LCD Grafisk under resurser på kurshemsidan, s.14-23. Lab 3 - Drivrutiner - Enkel grafik
Tentamen Nätverksprogrammering Lösningsförslag
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2012 05 28, 8.00 13.00 Del 1 1. Time To Live (TTL) anger hur många routrar ett multicastpaket
GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner
GPT föreläsning 8 Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner Denna gång Reflektioner kring OU1 Funktioner Reflektioner
Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix
Datorer och datoranvändning Föreläsningar 2014/15 Per Holm Per.Holm@cs.lth.se Unix 2 (lab 1) Lågnivåprogrammering 23 (lab 2) Datorns hårdvara 45 L A TEX 69 (lab 3) Internet 98 (lab 4) Operativsystem 117
Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen.
Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes IDE-sektionen Juni 14 Utkast 1 Recap 2 Mera om nya typer 3 Kort 4 Fält Recap Man kan ge namn till typer. Vi undersökte enum
UNIX verktyg. Användbara kommandon Fil och informationssökning Tags Versionshanteringssystem
Användbara kommandon Fil och informationssökning Tags Versionshanteringssystem 1 Användbara kommandon 1 more är ett filter som visar information skärmvis Exempel: ls al more less är en mer kraftfull variant