操作系统 : 第一周作业

1 //example_1.c

2 

3 #include <stdio.h>

4 

5 int main(void){

6     printf("Hello World!! .\n");

7     return 0;

8 }

 

 

 1 //example_2.c

 2 #include <unistd.h>

 3 #include <stdarg.h>

 4 #include <time.h>

 5 #include <sys/types.h>

 6 #include <sys/wait.h>

 7 #include <stdio.h>

 8 #include <stdlib.h>

 9 

10 int tprintf(const char *fmt, ...){

11     va_list args;

12     struct tm *tstruct;

13     time_t tsec;

14     tsec = time(NULL);

15     tstruct = localtime(&tsec);

16     printf("%02d:%02d:%5d|", tstruct->tm_hour, tstruct->tm_min, tstruct->tm_sec, getpid());

17     va_start(args, fmt);

18     return vprintf(fmt, args);

19 }

20 int main(){

21     int i=0, j=0;

22     int pid;

23     printf("Hello from Parent Process , PID is %d.\n", getpid());

24     pid = fork();

25     if(pid == 0){

26         sleep(1);

27         for(i=0; i<3; ++i){

28             printf("Hello from Child Process %d. %d times\n", getpid(), i+1);;

29             sleep(1);

30         }

31     }

32     else if(pid != -1){

33         tprintf("Parent forked one child process -- %d.\n", pid);

34         tprintf("Parent is waiting for child to exit.\n");

35         waitpid(pid, NULL, 0);

36         tprintf("Child Process has exited.\n");

37         tprintf("Parent had exited.\n");

38     }

39     else tprintf("Everyting was done without error\n");

40     return 0;

41 }

 

 
example_3.c
 1 #include <unistd.h>

 2 #include <stdarg.h>

 3 #include <time.h>

 4 #include <sys/types.h>

 6 #include <sys/wait.h>

 7 #include <stdio.h>

 8 #include <stdlib.h>

 9 

10 int tprintf(const char *fmt, ...);

11 

12 int main(int argc, char const *argv[])

13 {

14     int pid;

15     pid = fork();

16     if(pid == 0){

17         sleep(5);

18         tprintf("Hello from Child Process !\n");

19         tprintf("I am calling exec.\n");

20         execl("/bin/ps", "-a", NULL);

21         tprintf("You should never see this because child is already gone.\n");

22     }

23     else if(pid != -1){

24         tprintf("Hello from Parent, pid %d.\n", getpid());

25         sleep(1);

26         tprintf("Parent forked process %d.\n", pid);

27         sleep(1);

28         tprintf("Parent is waiting for child to exit.\n");

29         waitpid(pid, NULL, 0);

30         tprintf("Parent had exited.\n");

31     }

32     else tprintf("Everything was done without error.\n");

33     return 0;

34 }

35 

36 int tprintf(const char *fmt, ...){

37     va_list args;

38     struct tm *tstruct;

39     time_t tsec;

40     tsec = time(NULL);

41     tstruct = localtime(&tsec);

42     printf("%02d:%02d:%5d|", tstruct->tm_hour, tstruct->tm_min, tstruct->tm_sec, getpid());

43     va_start(args, fmt);

44     return vprintf(fmt, args);

45 }

 

 

homework_1.c

 1 #include <stdio.h>

 2 #include <unistd.h>

 3 #include <sys/types.h>

 4 #include <sys/wait.h>

 5 #include <stdlib.h>

 6 

 7 int main(){

 8     int pid;

 9     pid = fork();

10     if(pid > 0){

11         pid = fork();

12         if(pid >0){

13             printf("parent : pid =  %d\n", getpid());

14             waitpid(pid, NULL, 0);

15             printf("Child Process has exited.\n");

16             printf("Parent had exited\n");

17             exit(1);

18         }

19         else if(pid == 0){

20             printf("child 2 : pid =  %d\n", getpid());

21             exit(0);

22         }

23     }

24     else if(pid ==0){

25         printf("child 1 : pid =  %d\n", getpid());

26         exit(0);

27     }

28     return 0;

29 }

 

homework_2.c

 1 #include <stdio.h>

 2 #include <unistd.h>

 3 #include <sys/types.h>

 4 #include <sys/wait.h>

 5 #include <stdlib.h>

 6 

 7 int main(){

 8     int pid;

 9     int n, i;

10     scanf("%d", &n);

11     for(i=0;i<n;++i){

12         pid = fork();

13         if(pid == 0){

14             printf("child : pid : %d , ppid : %d \n", getpid(), getppid());

15             continue;

16         }

17         else if(pid > 0){

18             waitpid(pid, NULL, 0);

19             exit(1);

20         }

21     }

22     return 0;

23 }

 

#include <stdio.h>

#include <unistd.h>

#include <sys/wait.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

    int pid[5];

    int i;

    for(i=0;i<5;++i){

        pid[i] = fork();

        if(pid[i]==0){

            printf("zi(%d) pid:  %d,  fu pid: %d \n", i+1, getpid(), getppid());

            exit(0);

        }

    }

    for(i=0;i<5;++i)

        waitpid(pid[i], NULL, 0);

    printf("fupid: %d \n", getpid());

    return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(操作系统)