test_fork.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== test_fork.c ============================================================
  2.  * Copyright (c) 1994 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Test fork() and dup2() calls.
  5.  *
  6.  *  1.00 94/04/29 proven
  7.  *      -Started coding this file.
  8.  */
  9. #define PTHREAD_KERNEL
  10. #include <pthread.h>
  11. #include <stdio.h>
  12. #include <fcntl.h>
  13. main()
  14. {
  15. pthread_t thread;
  16. int flags, pid;
  17. pthread_init(); 
  18. if (((flags = machdep_sys_fcntl(1, F_GETFL, NULL)) >= OK) && 
  19.   (flags & __FD_NONBLOCK | O_NDELAY)) {
  20. machdep_sys_fcntl(1, F_SETFL, flags & (~__FD_NONBLOCK | O_NDELAY));
  21. }
  22. printf("parent process %dn", getpid());
  23. switch(pid = fork()) {
  24. case OK:
  25. exit(OK);
  26. break;
  27. case NOTOK:
  28. printf("fork() FAILEDn");
  29. exit(2);
  30. break;
  31. default:
  32. if ((flags = machdep_sys_fcntl(1, F_GETFL, NULL)) >= OK) {
  33. if (flags & (__FD_NONBLOCK | O_NDELAY)) {
  34. printf("fd flags not set to BLOCKING ERRORn");
  35. printf("test_fork FAILEDn");
  36. exit(1);
  37. break;
  38. }
  39. printf("The stdout fd was set to BLOCKINGn");
  40. printf("child process %dn", pid);
  41. flags = machdep_sys_fcntl(1, F_GETFL, NULL);
  42. if (flags & (__FD_NONBLOCK | O_NDELAY)) {
  43. printf("The stdout fd was reset to O_NDELAYn");
  44. } else {
  45. printf("Error: the stdout fd was not resetn");
  46. printf("test_fork FAILEDn");
  47. exit(1);
  48. }
  49. }
  50. break;
  51. }
  52. printf("test_fork PASSEDn");
  53. pthread_exit(NULL);
  54. }