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

MySQL数据库

开发平台:

Visual C++

  1. /* ==== test_execve.c ============================================================
  2.  * Copyright (c) 1994 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Test execve() 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 <string.h>
  12. #include <unistd.h>
  13. #include <fcntl.h>
  14. #include <stdio.h>
  15. extern char **environ;
  16. char *argv[] = {
  17. "/bin/echo",
  18. "This message should be displayed after the execve system call",
  19. NULL
  20. };
  21. char * should_succeed = "This line should be displayedn";
  22. char * should_fail = "Error: This line should NOT be displayedn";
  23. main()
  24. {
  25. pthread_t thread;
  26. int fd;
  27. pthread_init(); 
  28. printf("This is the first messagen");
  29. if (isatty(1)) {
  30. if ((fd = open(ttyname(1), O_RDWR)) < OK) {
  31. printf("Error: opening ttyn");
  32. exit(1);
  33. }
  34. } else {
  35. printf("Error: stdout not a ttyn");
  36. exit(1);
  37. }
  38. printf("This output is necessary to set the stdout fd to NONBLOCKINGn");
  39. /* do a dup2 */
  40. dup2(fd, 1);
  41. write(1, should_succeed, (size_t)strlen(should_succeed));
  42. machdep_sys_write(1, should_fail, strlen(should_fail));
  43. if (execve(argv[0], argv, environ) < OK) {
  44. printf("Error: execven");
  45. exit(1);
  46. }
  47. PANIC();
  48. }