Information OPERATIVSYSTEM UNIXPROGRAMMERING

Storlek: px
Starta visningen från sidan:

Download "Information OPERATIVSYSTEM UNIXPROGRAMMERING"

Transkript

1 Information OPERATIVSYSTEM UNIXPROGRAMMERING Lärare: Reine Lundin Rum: 5A 429 E-post: Hemsida: Telefon: Laborationer Append (filhantering) Med Systemanrop. Enligt ANSI -standarden. Semaforer (processhantering) Kommandotolk (fil + processhantering) 6/25/03 RL - Operativsystem 1 6/25/03 RL - Operativsystem 2 1

2 Jämförelse mellan C och C++ Olika format cin - scanf int scanf(sträng, arg1, arg2,...) cout - printf int printf(sträng, arg1, arg2, ) g++ - gcc fil.cc - fil.c Alla dekl. överst i funktionerna. c Tecken d Heltal f Flyttal (float) lf Flyttal (double) s Textsträng Man kan även ange antal tecken: printf( %10d, ); 10 positioner upptas alltid vid utskrift. printf( %.2f, ); Utskrift med två decimaler. printf( %6.2f, ); Två decimaler och totalt sex tecken. scanf( %2f, ); Läser endast in två tecken. 6/25/03 RL - Operativsystem 3 6/25/03 RL - Operativsystem 4 2

3 Exempel 1 Filhantering 1 #include <stdio.h> int main(void) int age; char name[50]; printf( How old are you: ); scanf( %d, &age); printf( What is your name? ); scanf( %49s, name); printf( Hi %s, you are %d years old\n, name, age); Systemanrop open creat close read write lseek unlink ANSI-C fopen fread fwrite fseek fclose 6/25/03 RL - Operativsystem 5 6/25/03 RL - Operativsystem 6 3

4 Filhantering C++ Filhantering #include <fstream.h> int tal; fstream fil; fil.open( fil.txt, ios::in ios::out ios::trunc); cout << Mata in ett tal: ; cin >> tal; fil.write((char*)&tal,sizeof(tal)); fil.close(); Obuffrad Systemanrop filnummer read / write Formaterad scanf / printf Ett tecken getc / putc fgetc / fputc I/O Buffrad ANSI C strömmar Oformaterad En rad gets / puts fgets / fputs Direkt fread / fwrite 6/25/03 RL - Operativsystem 7 6/25/03 RL - Operativsystem 8 4

5 Filnummer open Kärnan använder sig utav filnummer för att referera till öppna filer. Ett filnummer är ett icke negativt heltal. Alla processer har (normalt) 0 standard input 1 standard output 2 standard error Processtabell filtabell 0 status 1 offset 2 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> char *name; int fd, rwmode, perms; fd = open(name, rwmode, perms); fd - filnummer, -1 vid fel. name - filens namn. 6/25/03 RL - Operativsystem 9 6/25/03 RL - Operativsystem 10 5

6 open creat rwmode - hur ska filen öppnas. O_RDONLY (0) Öppna för att läsa. O_WRONLY (1) Öppna för att skriva. O_RDWR (2) Öppna för att läsa och skriva. O_APPEND Börja skriva i slutet av filen. O_CREAT Skapa filen om den inte existerar. O_TRUNC Trunkera filen, ta bort tidigare innehåll. perms - filens accessrättigheter, används vid skapandet av nya filer User, Group, other. #include <sys/types.h> #include <sys/stat.h> #include <fcntl> char *name; int fd, perms; fd = creat(name, perms); Det samma som: fd = open(name, O_WRONLY O_CREAT O_TRUNC, perms); 6/25/03 RL - Operativsystem 11 6/25/03 RL - Operativsystem 12 6

7 close read int fd, ok; ok = close(fd); ok - returvärde, 0 om OK och -1 vid fel. fd - filnummer. int fd, n, nread; char buffer[size]; nread = read(fd, buffer, n); nread - antal lästa tecken, 0 vid EOF och -1 vid fel. fd - filnummer. buffer - teckenbuffer. n - antal tecken som önskas läsas. 6/25/03 RL - Operativsystem 13 6/25/03 RL - Operativsystem 14 7

8 write Exempel 2 int fd, n, nwrite; char buffer[size]; nwrite = write(fd, buffer, n); nwrite - antalet skrivna tecken, -1 vid fel. fd - filnummer. buffer - teckenbuffer. n - antal tecken som önskas skrivas. #define SIZE 1024 #define STDIN 0 #define STDOUT 1 int nread; char buffer[size]; while((nread = read(stdin, buffer, SIZE)) > 0) write(stdout, buffer, nread); 6/25/03 RL - Operativsystem 15 6/25/03 RL - Operativsystem 16 8

9 lseek Exempel 3 #include <sys/types.h> int fd, origin; long offset, pos; pos = lseek(fd, offset, origo); #include my.h #define MAX 10 int fd, pos1, pos2; char buff[max]; pos - ny offset, -1 vid fel. fd - filnummer. offset - anger förflyttningen i bytes relativt origo. origo - anger utgångsposition SEEK_SET (filstart) SEEK_CUR (nuvarande filposition) SEEK_END (filslut) fd = open( text.txt, O_RDONLY); pos1 = lseek(fd, 0, SEEK_CUR); read(fd, buff, MAX); pos 2 = lseek(fd, 0, SEEK_CUR); printf( pos1 = %d, pos2 = %d\n, pos1, pos2); 6/25/03 RL - Operativsystem 17 6/25/03 RL - Operativsystem 18 9

10 unlink Exempel 4 char *name; int ok; ok = unlink(name); #define PERMS 0000 int f1, f1; ok - returvärde, 0 om OK och -1 vid fel. name - namnet på den fil som skall tas bort. unlink räknar ned antalet link count med ett, blir antalet noll tas filen bort. if((f1 = creat( test.txt, PERMS)) == -1) printf( Can t create test.txt (1)\n ); if((f2 = creat( test.txt, PERMS)) == -1) printf( Can t create test.txt (2)\n ); unlink( test.txt ); 6/25/03 RL - Operativsystem 19 6/25/03 RL - Operativsystem 20 10

11 Argument till main Exempel 5 #include <stdio.h> int main(int argc, char* argv[]) int i; printf( argc = %d\n, argc); for(i = 0; i < argc; i++) printf( argv[%d] = %s\n, i, argv[i]); 6/25/03 RL - Operativsystem 21 #include my.h #define PERMS 0644 #define SIZE 1024 int main(int argc, char *argv[]) int f1, f2, nread; char buffer[size]; if(argc!= 3) printf( Usage: %s <from> <to>\n, argv[0]); exit(-1); if((f1 = open(argv[1], O_RDONLY)) == -1) printf( Can t open %s\n, argv[1]); 6/25/03 RL - Operativsystem 22 11

12 Exempel 5 forts Filhantering enligt ANSI C exit(-1); if(f2 = creat(argv[2], PERMS)) == -1) printf( Can t create %s\n, argv[2]); exit(-1); while((nread = read(f1, buffer, SIZE)) > 0) if(write(f2, buffer, nread)!= nread) printf( Write error\n ); exit(-1); Strömmar istället för filnummer. Pekare till en strukt (FILE objekt). Funktioner fopen(name, mode) mode: r, w, a, r+, w+, a+ fread(objptr, size, nsize, streamptr) fwrite(objptr, size, nsize, streamptr) size är storleken på ett objekt. nsize är antalet objekt att skriva / läsa. fseek(streamptr, offset, origo) Fungerar som lseek. fclose(streamptr) Sök själva på mansidorna om dessa funktioner man nr cmd 6/25/03 RL - Operativsystem 23 6/25/03 RL - Operativsystem 24 12

13 Exempel 6 Uppgift 1 #include <stdio.h> FILE *infile, *outfile; char data; outfile = fopen( copy.dat, w ); infile = fopen( file.dat, r ); while(fread(&data, sizeof(char), 1, infile)!= 0) fwrite(&data, sizeof(char), 1, outfile); fclose(infile); fclose(outfile); 6/25/03 RL - Operativsystem 25 Vad gör programmet? #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> char buf1[] = abcdefghij ; char buf2[] = ABCDEFGHIJ void main() int fd; fd = creat( fil, 0755); write(fd, buf1, 10); lseek(fd,40,seek_set); write(fd, buf2, 10); 6/25/03 RL - Operativsystem 26 13

14 Processhantering 1 sleep sleep fork wait getpid waitpid Används för att få en process att sova. Sover den angivna tiden eller tills en signal skickas (som inte skall ignoreras). int value, time; value = sleep(time); value - 0 om sleep har sovit färdigt, annars det antal sekunder som är kvar att sova. time - det antal sekunder som en process skall sova. 6/25/03 RL - Operativsystem 27 6/25/03 RL - Operativsystem 28 14

15 Exempel 7 fork #include <stdio.h> printf( Nu skall processen sova\n ); sleep(5); printf( Nu har processen sovit färdigt\n ); Används för att skapa en ny process. #include <sys/types.h> int value; value = fork(); value = 0 barnprocessen exekverar. > 0 föräldraprocessen exekverar. = - 1 systemanropet misslyckades. 6/25/03 RL - Operativsystem 29 6/25/03 RL - Operativsystem 30 15

16 Exempel 8 Exempel 9 #include <stdio.h> #include <sys/types.h> #include <stdio.h> #include <sys/types.h> int child; int child; child = fork(); printf( In main: %d\n, child); child = fork(); child = fork(); printf( In main: %d\n, child); 6/25/03 RL - Operativsystem 31 6/25/03 RL - Operativsystem 32 16

17 Exempel 10 Exempel 11 #include <stdio.h> #include <sys/types.h> int child, i = 0; if((child = fork()) == 0) i = 1; printf( In main: %d:%d\n, child, i); #include <sys/types.h> while(1) fork(); 6/25/03 RL - Operativsystem 33 6/25/03 RL - Operativsystem 34 17

18 wait Används då föräldraprocessen ska invänta en barnprocess. #include <sys/types.h> #include <sys/wait.h> int childpid, status; childpid = wait(&status); childpid - barnprocessens pid-nummer, -1 vid fel. status - barnprocessens exitstatus (terminate / abort). #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <fcntl.h> int fd, stat, pos; char buff[10]; Exempel 12 fd = open( data, O_RDONLY); read(fd, buff, 10); pos = lseek(fd, 0, SEEK_CUR); printf( Before fork %d\n, pos); 6/25/03 RL - Operativsystem 35 6/25/03 RL - Operativsystem 36 18

19 Exempel 12 forts... getpid switch(fork()) case 0: pos = lseek(fd, 0, SEEK_CUR); printf( Child before read %d\n, pos); read(fd, buff, 10); pos = lseek(fd, 0, SEEK_CUR); printf( Child after read %d\n, pos); exit(0); default: break; wait(&stat); pos = lseek(fd, 0, SEEK_CUR); printf( Parent after wait %d\n, pos); 6/25/03 RL - Operativsystem 37 Returnerar processens PID-nummer #include <sys/types.h> int pid; pid = getpid(); pid - processens pid-nummer. 6/25/03 RL - Operativsystem 38 19

20 Exempel 13 waitpid() #include <stdio.h> #include <sys/types.h> int child; child = fork(); if(child == 0) printf( Child (PID = %d)\n, getpid()); else if(child > 0) printf( Parent (PID = %d)\n, getpid()); else printf( Can t create new process\n ); Väntar på en specifik barnprocess. #include <sys/types.h> #include <sys/wait.h> int pid1, pid2, status, options; pid2 = waitpid(pid1, &status, options); pid1 - det pid som föräldern vill vänta på. pid2 - pid på det terminerande barnet, -1 vid fel. status - statusen på det terminerade barnet. options - vanligen WNOHANG (ej blockerande). 6/25/03 RL - Operativsystem 39 6/25/03 RL - Operativsystem 40 20

21 Exempel 14 Exempel 14 forts #include my.h int pid, status; switch(pid = fork()) case 0: default: printf( Child sleeping\n ); sleep(5); printf( Child terminates\n ); exit(0); break; while(waitpid(pid, &status, WNOHANG) == 0) printf( Still waiting \n ); sleep(1); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 41 6/25/03 RL - Operativsystem 42 21

22 Varför får man zombies? Ett barn dör när föräldern inte utför en wait. Vad händer om en förälder terminerar medans ett eller flera barn fortfarande exekverar? Init tar över. Hur undviker man att systemet blir nedlusat av zombies? wait, waitpid. signal (senare) 6/25/03 RL - Operativsystem 43 Uppgift 2 Antag att anrop till getpid() ger följande svar; 100, 101, 102 osv. Vad blir utskriften? Se till att alla kopplingar mellan processerna illustreras. #include my.h int i, c; for(i = 0; i <= 2; i++) c = fork(); printf( %5d:%5d:%5d\n, getpid(), c, i); 6/25/03 RL - Operativsystem 44 22

23 Processhantering 2 exec exec execl execv execle execve execlp execvp kill signal Används för att ladda ett nytt program i en process. int a, b; char *path, *file, *argv[]; a = execl(path, argv[0], ); b = execlp(file, argv[0], ); path - sökvägen till programmet som skall laddas. file- namnet på programmet som skall laddas. arg - kommando och argument som används för att starta upp det nyladdade programmet. a, b - Ingen retur vid ok, -1 vid fel. 6/25/03 RL - Operativsystem 45 6/25/03 RL - Operativsystem 46 23

24 Exempel 15 Exempel 16 #include my.h #include <stdio.h> execl( /bin/date, date, NULL); printf( Can t overlay process\n ); void main() int child, status; if((child = fork()) == 0) execl( /usr/bin/cal, cal, 10, 1999, NULL); printf( Can t overlay process\n ); else if(child > 0) wait(&status); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 47 6/25/03 RL - Operativsystem 48 24

25 Exempel 17 Exempel 17 forts #include my.h /* sleep5.c */ #include <stdio.h> int main(int argc, char *argv[]) printf( %s\n, argv[0]); sleep(5); void main() int child, status; if((child = fork()) == 0) execl(./sleep5, sleep5, NULL); printf( Can t overlay process\n ); else if(child > 0) wait(&status); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 49 6/25/03 RL - Operativsystem 50 25

26 Exempel 18 Signaler #include my.h void main() int child, status; if((child = fork()) == 0) execl(./sleep5, sleep5, NULL) else if(child > 0) wait(&status); if(fork() == 0) execl( /bin/date, date, NULL); wait(&status); printf( Parent terminates\n ); En signal är en notering till en process att en händelse har inträffat. Kallas ofta software interrupts. Inträffar vanligtvis asynkront, dvs en mottagare vet i förväg inte när en signal anländer Signaler kan skickas: Av en process till en annan, eller till sig själv, mha systemanropet kill. Av kärnan till en process. Alla signaler har ett namn, se headerfilen <signal.h> Observera att en signal dödar inte alltid en process. Vissa terminaltecken genererar signaler: ctrl - c SIGINT ctrl - \ SIGQUIT ctrl - z SIGSTF 6/25/03 RL - Operativsystem 51 6/25/03 RL - Operativsystem 52 26

27 Exempel 19 kill Är ett systemanrop, som används av processer för att skicka signaler till andra processer. #include <signal.h> int retcode, childpid; retcode = kill(childpid, SIGKILL); retcode - returvärde = 0 systemanropet lyckades = -1 systemanropet misslyckades childpid - processnumret på processen som skall terminera 6/25/03 RL - Operativsystem 53 #include my.h void main() int child; if((child = fork()) == 0) else printf( Barnet sover\n ); sleep(60); printf( Barnet vaknar\n ); sleep(1) // Barnet måste hinna skriva ut if(kill(child, SIGKILL) == 0) printf( Lyckades att döda barnet\n ); else printf( Barnet lever\n ); 6/25/03 RL - Operativsystem 54 27

28 signal Exempel 20 Anger hur en signal ska tas emot. #include <signal.h> signal(signal, func); signal - namet på en signal, t ex SIGINT. func - kan vare en av följande tre alternativ: SIG_DFL, signalen ska hanteras på normalt sätt. SIG_IGN, signalen ska ignoreras. Adressen till en funktion som skall anropas när signalen inträffar. #include <signal.h> #define SEC 1 #define FOREVER 1 /* ignorera CTRL - c */ signal(sigint, SIG_IGN); while(forever) sleep(sec); 6/25/03 RL - Operativsystem 55 6/25/03 RL - Operativsystem 56 28

29 #include <stdio.h> #include <signal.h> #define SEC 1 #define FOREVER 1 void mysighandler() Exempel 21 printf( Catching the signal\n ); signal(sigint, mysighandler); while(forever) sleep(sec); 6/25/03 RL - Operativsystem 57 Uppgift 3 Vad blir utskriften om användaren trycker CTRL-C var 7:e sekund? #include <stdio.h> #include <signal.h> void olle() printf( a\n ); signal(sigint, SIG_DFL); 6/25/03 RL - Operativsystem 58 29

30 Uppgift 3 forts Filhantering 2 int i; signal(sigint, olle); pipe dup dup2 fcntl printf( b\n ); for(i = 0; i < 10; i++) printf( c\n ); sleep(3); printf( d\n ); printf( e\n ); 6/25/03 RL - Operativsystem 59 6/25/03 RL - Operativsystem 60 30

31 pipe pipe i en process Används vid kommunikation mellan två processer. En pipe är en I/O-mekanism, som fungerar enligt principen FIFO. user process read fd write fd int pfd[2], retcode; retcode = pipe(pfd); kernel pfd[0] - Filnummer för läsning på pipen. Pfd[1] - Filnummer för skrivning på pipen. Retcode - returvärde vid skapande av pipen: >= 0 systemanropet lyckades. = -1 systemanropet misslyckades. flow of data 6/25/03 RL - Operativsystem 61 6/25/03 RL - Operativsystem 62 31

32 #include my.h #define MSGSIZE 16 char buff[msgsize]; int pfd[2], j; Exempel 22 pipe(pfd); write(pfd[1], Hello world, #1, MSGSIZE); write(pfd[1], Hello world, #2, MSGSIZE); write(pfd[1], Hello world, #3, MSGSIZE); for(j = 0; j <3; j++) read(pfd[0], buff, MSGSIZE); printf( %s\n, buff); 6/25/03 RL - Operativsystem 63 Exempel 23 #include my.h #define MSG hello world\n int pfd[2], n; char buff[100]; if(pipe(pfd) == -1) printf( Can t create pipe\n ); exit(-1); printf( rfd = %d, wfd = %d\n, pfd[0], pfd[1]); 6/25/03 RL - Operativsystem 64 32

33 Exempel 23 forts Exempel 24 if(write(pfd[1], MSG, sizeof(msg))!= sizeof(msg)) printf( Can t write to pipe\n ); exit(-1); if((n = read(pfd[0], buff, sizeof(buff))) == -1) printf( Can t read from pipe\n ); exit(-1); write(1, buff, n); #include my.h int pfd[2], j; pipe(pfd); for(j = 1; 1; j++) retrun 0; write(pfd[1], a, 1); printf( %d\n, j); I mitt test 4096 byte s, men detta är systemberoende. 6/25/03 RL - Operativsystem 65 6/25/03 RL - Operativsystem 66 33

34 Pipe mellan två processer parent process child process write fd read fd kernel flow of data 6/25/03 RL - Operativsystem 67 #include my.h #define MSIZE 16 void main() char buff[msize]; int pfd[2]; pipe(pfd); switch(fork()) case 0: Exempel 25 exit(0); default: break; write(pfd[1], Hello world, #1, MSIZE); read(pfd[0], buff, MSIZE); printf( Child %s\n, buff); write(pfd[1], Hello world, #2, MSIZE); read(pfd[0], buff, MSIZE); printf( Parent %s\n, buff); 6/25/03 RL - Operativsystem 68 34

35 #include my.h #define MSIZE 16 void main() char buff[msize]; int pfd[2]; pipe(pfd); switch(fork()) case 0: Exempel 26 exit(0); default: break; close(pfd[1]); read(pfd[0], buff, MSIZE); printf( Parent %s\n, buff); close(pfd[0]); write(pfd[1], Hello world, #1, MSIZE); 6/25/03 RL - Operativsystem 69 Uppgift 4 Vad blir utskriften? #include my.h int c, pfd[2]; char msg[13] = Good luck ; pipe(pfd); printf( %d\n, c = fork()); printf( %d\n, c = fork()); if(!c) write(pfd[1], Hello world\n, 13); else read(pfd[0], msg, 13); printf( %s\n, msg); 6/25/03 RL - Operativsystem 70 35

36 Pipe mellan tre processer Exempel 27 #include my.h #define MSIZE 16 P1 P2 P3 char buff[msize]; int pfd1[2], pfd2[2]; Pipe1 Kernel Pipe 2 6/25/03 RL - Operativsystem 71 pipe(pfd1); pipe(pfd2); if(!fork()) close(pfd1[0]); close(pfd2[0]); close(pfd2[1]); write(pfd1[1], Hello world, #1, MSIZE); exit(0); 6/25/03 RL - Operativsystem 72 36

37 Exempel 27 forts dup else if(!fork) close(pfd1[1]); close(pfd2[0]); read(pfd1[0], buff, MSIZE); printf( Child2 %s\n buff); write(pfd2[1], Hello world, #2, MSIZE); exit(0); close(pfd1[0]); close(pfd1[1]); close(pfd2[1]); read(pfd2[0], buff, MSIZE); printf( Parent %s\n, buff); Används för att skapa en kopia till ett filnummer. Det gamla och det nya filnumret refererar till samma fil. Det lägst lediga filnumret kommer att användas. int old_fd, new_fd; new_fd = dup(old_fd); old_fd - det gamla filnumret. new_fd - det nya filnumret >= 0 systemanropet lyckades. = -1 systemanropet misslyckades. 6/25/03 RL - Operativsystem 73 6/25/03 RL - Operativsystem 74 37

38 Exempel 28 Exempel 28 forts #include my.h #define PERMS 0644 #define OUT outfile #define SIZE 1024 #define STDOUT 1 int fd, status; if((fd = creat(out, PERMS)) == -1) printf( Can t create %s\n, OUT); exit(-1); if(fork() == 0) close(stdout); dup(fd); printf( Hello world!\n ); close(fd); exit(0); wait(&status); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 75 6/25/03 RL - Operativsystem 76 38

39 Uppgift 5 #include my.h char buff[128] = Exame time ; int pfd[2]; pipe(pfd); switch(fork()) case 0: close(1); dup(pfd[1]); default: break; strcpy(buff, summer ); printf( child, %s\n, buff); strcpy(buff, I will pass ); exit(0); read(pfd[0], buff); printf( Parent, %s\n, buff); 6/25/03 RL - Operativsystem 77 dup2 Används för att skapa en kopia till ett filnummer. int old_fd, new_fd, retur; retur = dup(old_fd, new_fd); old_fd - det gamla filnumret. new_fd - det nya filnumret retur - returnerar det nya filnumret >= 0 systemanropet lyckades. = -1 systemanropet misslyckades. dup2 gör new_fd till en kopia av old_fd, och stänger new_fd om det är nödvändigt. 6/25/03 RL - Operativsystem 78 39

40 Exempel 29 Exempel 29 forts #include my.h #define PERMS 0644 #define OUT outfile #define SIZE 1024 #define STDOUT 1 int fd, status; if((fd = creat(out, PERMS)) == -1) printf( Can t create %s\n, OUT); exit(-1); if(fork() == 0) dup2(fd, STDOUT); printf( Hello world!\n ); close(fd); exit(0); wait(&status); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 79 6/25/03 RL - Operativsystem 80 40

41 fcntl fcntl forts Används för att ändra egenskaper för en öppnad fil. #include <sys/types.h> #include <fcntl.h> int fd, cmd, arg, retur; retur = fcntl(fd, cmd, arg); fd - filnumret vilkens egenskaper ska ändras. arg - beroende av cmd retur - returvärde >= 0 systemanropet lyckades (beror av cmd). = -1 systemanropet misslyckades cmd - F_DUPFD (File Descriptor) F_GETFD F_SETFD F_GETFL (ststus FLags) F_SETFL F_GETOWN (OWNership) F_SETOWN F_GETLK (record LocKs) F_SETLK F_SETLKW 6/25/03 RL - Operativsystem 81 6/25/03 RL - Operativsystem 82 41

42 Exempel 30 Exempel 30 forts #include my.h #define PERMS 0644 #define OUT outfile #define SIZE 1024 #define STDOUT 1 int fd, status, old; if((fd = creat(out, PERMS)) == -1) printf( Can t create %s\n, OUT); exit(-1); if(fork() == 0) old = dup(stdout); dup2(fd, STDOUT); write(stdout,"hello world!\n", 14); close(stdout); fcntl(old, F_DUPFD, STDOUT); write(stdout,"child terminates\n",18); exit(0); wait(&status); printf( Parent terminates\n ); 6/25/03 RL - Operativsystem 83 6/25/03 RL - Operativsystem 84 42

43 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> Uppgift 6 #define RUNMSG " Running #define TERMMSG " Terminating #define MSGSIZE 20 Uppgift 6 forts void writemsg(int fdw) int i; char msg[msgsize]; void readmsg(int fdr) int nread; char buffer[msgsize]; while((nread = read(fdr, buffer, MSGSIZE))!= 0) puts(buffer); if(strcmp(strchr(buffer, ''), TERMMSG) == 0) return; sprintf(msg, "%d", getpid()); strcat(msg, RUNMSG); for(i = 0; i < 10; i++) write(fdw, msg, MSGSIZE); sleep(1); sprintf(msg, "%d", getpid()); strcat(msg, TERMMSG); write(fdw, msg, MSGSIZE); 6/25/03 RL - Operativsystem 85 6/25/03 RL - Operativsystem 86 43

44 int main(void) Uppgift 6 forts int pdf[2], childpid, stat; if(pipe(pdf) == -1) perror("can t create pipe"); exit(-1); if((childpid = fork()) == 0) readmsg(pdf[0]); else if(childpid > 0) writemsg(pdf[1]); else perror("can t fork"); exit(-1); wait(&stat); printf("process %d treminates...\n", getpid()); 6/25/03 RL - Operativsystem 87 #include my.h Uppgift 7 #define RUNMSG Running\0 #define TERMMSG Terminating\0 #define MSGSIZE 20 void readwritemsg(int fdr, int fdw) int nread; char buffer[msgsize]; while((nread = read(fdr, buffer, MSGSIZE))!= 0) puts(buffer); 6/25/03 RL - Operativsystem 88 44

45 Uppgift 7 forts Uppgift 7 forts if(strcmp(strchr(buffer, ), TERMMSG) == 0) else sprintf(buffer, %d, getpid()); strcat(buffer, TERMMSG); write(fdw, buffer, MSGSIZE); return; sleep(1); sprintf(buffer, %d, getpid()); strcat(buffer, RUNMSG); write(fdw, buffer, MSGSIZE); 6/25/03 RL - Operativsystem 89 void writereadmsg(int fdw, int fdr) time_t starttime, currenttime; char msg[msgsize]; starttime = time(&starttime); while(difftime(time(&curenttime), starttime) < 30.0) sprintf(msg, %d, getpid()); strcat(msg, RUNMSG); write(fdw, msg, MSGSIZE); read(fdr, msg, MSGSIZE); puts(msg); sleep(1); sprintf(msg, %d, getpid()); strcat(msg, TERMMSG); write(fdw, msg, MSGSIZE); read(fdr, msg, MSGSIZE); puts(msg); 6/25/03 RL - Operativsystem 90 45

46 Uppgift 7 forts int pdf1_2[2], pdf2_3[2], pdf3_1[2], stat, child1pid, child2pid; if(pipe(pfd1_2) == -1) perror( Can t create pipe ); exit(-1); if(pipe(pfd2_3) == -1) perror( Can t create pipe ); exit(-1); if(pipe(pfd3_1) == -1) perror( Can t create pipe ); exit(-1); 6/25/03 RL - Operativsystem 91 Uppgift 7 forts if((child1pid = fork()) == 0) readwritemsg(pdf1_2[0], pdf2_3[1]); else if(child1pid > 0) if((child2pid = fork()) == 0) readwritemsg(pfd2_3[0], pfd3_1[1]); else if(child2pid > 0) writereadmsg(pfd1_2[1], pfd3_1[0]); else perror( Can t fork ); exit(-1); else perror( Can t fork ); exit(-1); wait(&status); printf( Process %d terminates \n, getpid()); 6/25/03 RL - Operativsystem 92 46

read Systemanrop i UNIX Exempel med read & write write int antal_tkn, fd, count; char buffer[size]; antal_tkn = read(fd, buffer, count);

read Systemanrop i UNIX Exempel med read & write write int antal_tkn, fd, count; char buffer[size]; antal_tkn = read(fd, buffer, count); 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

Läs mer

... Funktionsanrop. Vad händer när man kör ett program?

... 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

Läs mer

Programmeringsteknik med C och Matlab

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

Läs mer

HI1025 Operativsystem, KTH Haninge, VT2012

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

Läs mer

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. 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

Läs mer

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) 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

Läs mer

Grundprogrammen. combine

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

Läs mer

Lärare och handledare. Systemnära programmering. I dag. Föreläsningar & Gruppövningar & Handledning. Marcus Karlsson

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

Läs mer

printenv sort pager printenv grep args sort pager

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

Läs mer

Möte 9: Relationer mellan körande processer - (PI)

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

Läs mer

Systemnära programmering 2012-11-05. Tentamen. Systemnära programmering, 7.5hp 5 november 2012

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

Läs mer

Användbara systemanrop och biblioteksfunktioner. 2G1520 Operativsystem

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

Läs mer

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 / 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

Läs mer

Möte 10: Kommunikation mellan processer - (PI)

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

Läs mer

Signaler. Icke tillförlitliga signaler. Vad göra?

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

Läs mer

TDIU01 - Programmering i C++, grundkurs

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

Läs mer

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

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

Läs mer

Pekare och arrayer. Indexering och avreferering

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

Läs mer

Övning från förra gången: readword

Ö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

Läs mer

Tellstick-15.c. Kompilering av programmet: gcc -o tellstick-15 -Wall -ltelldus-core -W -O2 -s -pipe -lm tellstick-15.c

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

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

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

Läs mer

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt

Läs mer

Del II: Systemprogrammering och Inter-Process Communication.

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

Läs mer

Repetition av filer Grundkurs i programmering med Python

Repetition av filer Grundkurs i programmering med Python Hösten 2009 Dagens lektion Formattera text 2 3 REPETITION AV FILER Filer på en dator En fil består av en sekvens av digitalt data (ettor och nollor). Upp till program att tolka dessa siffror. Skillnad

Läs mer

Operativsystem ID1200/06 Tentamen :00-18:00

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,

Läs mer

Utkast. Programmering. Signals. Olika typer av program. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Avbrott i mjukvara.

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

Läs mer

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Innehållsförteckning. Exempel. Åtkomst & användarhandledning Framsidan Framsidan på din labrapport kan du utforma ganska fritt. Tänk bara på att den ska vara läsbar, och innehålla (minst) följande information: Ditt namn Din e-mail adress här på CS! Kursens namn

Läs mer

Föreläsning 7 Strängar

Föreläsning 7 Strängar Föreläsning 7 Strängar I C använder vi strängar för att lagra text. Strängar kommer in ganska sent i kursen, det är jag inte så glad över, men det finns också fördelar, vi har grundat oss rejält nu i funktioner,

Läs mer

Strängar. Strängar (forts.)

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

Läs mer

Deluppgift 17 Processhantering: exec, sleep, exit, plist

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

Läs mer

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Att komma igång Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Vad är ett program? En processor kan endast utföra extremet enkla

Läs mer

(2) Skriv ett program som skapar ett antal processer vars relationer beskrivs av nedanstående tidsdiagram a

(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

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,

Läs mer

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar När man skall lösa ett komplicerat problem gör man det lättast genom

Läs mer

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare. Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare. I plastkortsskrivaren kan man via drivrutinerna både läsa av och koda en magnetremsa. Man kan också göra en kortdesign i emedia där

Läs mer

2... uppvisa förmåga att skapa och/eller hantera flerprocessiga program där de ingående processerna ges

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

Läs mer

Enkla datatyper minne

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

Läs mer

Skizz till en enkel databas

Skizz till en enkel databas Skizz till en enkel databas Data: Register En vektor Funktioner: Databas Initiera huvudloop Avsluta Poster (struct( struct) val Mata in Skriv ut Spara Hämta Ändra Radera Enligt diskussion 1999-11-23 Bertil

Läs mer

Pekare ( )

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

Läs mer

Programmeringsteknik med C och Matlab

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

Läs mer

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(). 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

Läs mer

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

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,

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

Föreläsning 13. In- och utmatning

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äs mer

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt Flera processer Minneshantering Operativsystem lektion 6 Potentiellt problem: Den sida som plockas bort behöver inte vara den sida som används minst!! Det kan finnas andra processer som inte körs eller

Läs mer

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world Programmering i C Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur Kernighan, Ritchie: The C Programming Language, Second edition, Steve Oualline:

Läs mer

Deklarera en struct som kan användas för att representera en rät linje

Deklarera en struct som kan användas för att representera en rät linje 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 en linje som går genom punken (0,2) och

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

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

Läs mer

Raspberry Pi och Tellstick, ett program i C.

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

Läs mer

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

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....................

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Exempelsamling Assemblerprogrammering

Exempelsamling Assemblerprogrammering Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start

Läs mer

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I 2001-01-20 Betygsgränser: 3 16 poäng 4 23 poäng 5 30 poäng Maxpoäng: 36 poäng Hjälpmedel: inga Lycka till Per Ekeroot Uppgift 1 Kortfrågor

Läs mer

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

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

Läs mer

Avancerad SSL-programmering II

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

Läs mer

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?? 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

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

#include <pthread.h> #include <stdio.h> int p1[2]; void* char_print (void* parameter) { int fds; fds = *((int *)parameter); int i;

#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

Läs mer

Kapitel 5. Strömmar. Utmatning

Kapitel 5. Strömmar. Utmatning Kapitel 5 Strömmar Kapitel 5 - Strömmar Utmatning med std::ostream och std::ostringstream Inmatning med std::istream och std::istringstream Överlagring av in- och utmatning Iteratorer för in- och utmatning

Läs mer

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut F5: Filhantering in- och utmatning (kap. 2 och 8) 1 Utskrift på skärm, inläsning från tangentbord (kap. 2) Spara och hämta variabler med save och load (kap. 2) Kommandot textread Mer avancerad filhantering:

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

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 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

Läs mer

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2,

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2, Rekursion En funktion är rekursiv om den anropar sig själv, direkt eller indirekt. Alla funktioner kan anropas rekursivt. I sin enklaste form är rekursion enkel att förstå. printf("the universe is never

Läs mer

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012 1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

Läs mer

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-01-10 Skrivtid: 8.00 13.00 Hjälpmedel: Java-bok Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

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

Läs mer

( ostream ) << ( annan datatyp ) : ostream

( ostream ) << ( annan datatyp ) : ostream 1 Inmatning och utskrift Inmatning från tangentbord och utskrift till skärm sker i C++ med hjälp av strömmar. Vi har tidigare sett exempel på utskrift. Vi kommer i det här avsnittet även ta upp inmatning

Läs mer

Textsträngar från/till skärm eller fil

Textsträngar från/till skärm eller fil Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,

Läs mer

4 Sammansatta datatyper

4 Sammansatta datatyper 4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara

Läs mer

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.

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,

Läs mer

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

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

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

Fö 8 TSEA81. Real-time Linux

Fö 8 TSEA81. Real-time Linux Fö 8 TSEA81 Real-time Linux Real-time Linux Olika sätt att åstadkomma Real-time Linux: * Linux 2.6 har CONFIG_PREEMPT option, dvs även processer som gör systemanrop kan preemptas. * Linux 2.6 kan köras

Läs mer

En kort text om programmering i C.

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,

Läs mer

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013 1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

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äs mer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Funktionens deklaration

Funktionens deklaration Funktioner - 1 Teknik för stora program #include #include......... cout

Läs mer

Del6 Strömmar Ämnesområden denna föreläsning:

Del6 Strömmar Ämnesområden denna föreläsning: 2D1387, Programsystemkonstruktion med C++ 01/02 1 Del6 Strömmar Ämnesområden denna föreläsning: Utmatning till ostream och ostringstream Slide 1 Inmatning från istream och istringstream Överlagring av

Läs mer

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. 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

Läs mer

PC-teknik, 5 p LABORATION FILHANTERING

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

Läs mer

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då Agenda Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer Övningar nu och då 1 Motivering I de flesta problem ingår att hantera multipla data I de

Läs mer

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, KTH STH TENTAMEN HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011, 8.15-13.15 Gamla kurskoder: HI1900, 6E2950, etc. Examinator: Johnny Panrike Rättande lärare: Nicklas Brandefelt, Johnny

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

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

Läs mer

Hantering av textsträngar och talsträngar. William Sandqvist

Hantering av textsträngar och talsträngar. William Sandqvist Hantering av textsträngar och talsträngar Strängen Hello world! PIC-processorerna lagrar strängkonstanter med bokstäverna inbakade i en följd av instruktioner (en tabell). Man hämtar en bokstav genom att

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

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

Läs mer

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

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

Läs mer

Varför behövs det? I Allegro finns t.ex. stöd för:

Varför behövs det? I Allegro finns t.ex. stöd för: Allegro Introduktion Översikt vad är Allegro? Vad är lib och h-fil Kolla kodexempel Strukturen på ett Allegrospel Hur kommer jag igång? Var kan jag läsa mer Addons Alternativ Vad är Allegro? Ett spelprogrammeringsbibliotek

Läs mer

Föreläsning 5: Rekursion

Föreläsning 5: Rekursion Föreläsning 5: Rekursion Vi har tidigare sett att man kan dela upp problem i mindre bitar med hjälp av underprogram, vilket är ett utmärkt sätt att lösa problem. Detta är ganska lätt att rita upp för sig

Läs mer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer Datorlära 1 Introduktion till datasystemet, epost konto, afs hemkonto Introduktion till datorer och datasalar Open Office Calculator Beräkningar med Open Office Calc Diagram med OO Calc Datorlära 2 Utforma

Läs mer

C-programmering, föreläsning 2 Jesper Wilhelmsson

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

Läs mer

Introduktion C-programmering

Introduktion C-programmering Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder

Läs mer

Snabbslumpade uppgifter från flera moment.

Snabbslumpade uppgifter från flera moment. Snabbslumpade uppgifter från flera moment. Uppgift nr Ställ upp och dividera utan hjälp av miniräknare talet 48 med 2 Uppgift nr 2 Skriv talet 3 8 00 med hjälp av decimalkomma. Uppgift nr 3 Uppgift nr

Läs mer

C++-programmets beståndsdelar

C++-programmets beståndsdelar C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet

Läs mer