Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1 Processer. 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter.

Lignende præsentationer


Præsentationer af emnet: "1 Processer. 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter."— Præsentationens transcript:

1 1 Processer

2 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter forkkaldet fork returnerer: i barneprocessen : 0 i forælderprocessen : barneprocessens pid

3 3 wait #include pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int options); Wait suspenderer den kørende proces indtil en barneproces har exitet. Er barneprocessen allerede stoppet på det tidspunkt (en såkaldt "zombi" proces) returnerer wait med det samme og alle barneprocessens ressourcer frigives

4 4 Fork eksempel #include int main() { if ((fork()) != 0) { printf("Parent waiting\n"); wait((int *)0); printf("Parent exiting\n"); } else { printf("Child sleeping\n"); sleep(5); printf("Child exiting\n"); } exit(0); }

5 5 Exec Erstatter processen med den proces, hvis navn er angivet i kaldet int execl(const char *path, const char *arg0,... (char *) 0); int execv(const char *path, char *const argv[]); int execlp(const char *file, const char *arg0,..., (char *) 0); int execvp(const char *file, char *const argv[]);

6 6 Exec int main(int argc, char **argv) { char **save; save=argv; while (--argc > 0) printf("%s ", *++argv); printf("\n"); sleep(1); save[0]="echo"; execvp(save[0], save); }

7 7 Kopiering fra stdin til stdout #include int main() { char c; int i=0; while (read(0, &c, 1)) { i++; c++; write(1, &c, 1); } fprintf(stderr,"# char: %d in %d\n", i, getpid()); }

8 8 dup2 int dup(int fildesc); int dup2(int fildesc, int fildesc2); dup og dup2 dublerer en åben filbeskrivelse dup dublerer fildesc til første ledige plads dub2 dublerer fildessc til fildesc2

9 9 dub2 eksempel #include int main(int argc, char **argv) { int fd; if (argc < 2) { fprintf(stderr, "Usage: %s file\n", argv[0]); exit(1); } fd = open(argv[1], O_CREAT|O_WRONLY, 0600); dup2(fd, 1); close(fd); execlp("laesSkriv", "laesSkriv", NULL); }

10 10 pipe int pipe(int fildes[2]); pipe() danner en pipe og placerer to filbeskrivelser I argumenterne fildes[0] og fildes[1]. De svarer til læse- og skriveenden af pipen

11 11 pipe eksempel #include int main() { int p[2]; pipe(p); if((fork()) == 0) { close(p[1]); dup2(p[0], 0); close(p[0]); execlp(”kopier ", ”kopier", 0); } else if ((fork()) == 0) { close(p[0]); dup2(p[1], 1); close(p[1]); execlp(" kopier", ”kopier", 0); } close(p[0]); close(p[1]); wait((int *)0); exit(0); }


Download ppt "1 Processer. 2 fork int fork(); Danner en ny proces med samme indhold som forældre processen. I begge processer er programtælleren placeret lige efter."

Lignende præsentationer


Annoncer fra Google