exec.h 981 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef _BITS_EXEC_H
  2. #define _BITS_EXEC_H
  3. extern int execv(const char *path, char *const *argv);
  4. int execl(const char *path, const char* argv0, ...)
  5. {
  6. int argc;
  7. va_list ap;
  8. va_start(ap, argv0);
  9. for (argc = 1; va_arg(ap, const char*); argc++);
  10. va_end(ap);
  11. {
  12. int i;
  13. char *argv[argc+1];
  14. va_start(ap, argv0);
  15. argv[0] = (char *)argv0;
  16. for (i = 1; i < argc; i++) {
  17. argv[i] = va_arg(ap, char *);
  18. }
  19. argv[i] = NULL;
  20. va_end(ap);
  21. return execv(path, argv);
  22. }
  23. }
  24. extern int execve(const char *path, char *const *argv, char *const *envp);
  25. int execle(const char *path, const char* argv0, ...)
  26. {
  27. int argc;
  28. va_list ap;
  29. va_start(ap, argv0);
  30. for (argc = 1; va_arg(ap, const char *); argc++);
  31. va_end(ap);
  32. {
  33. int i;
  34. char *argv[argc+1];
  35. char **envp;
  36. va_start(ap, argv0);
  37. argv[0] = (char *)argv0;
  38. for (i = 1; i <= argc; i++) {
  39. argv[i] = va_arg(ap, char *);
  40. }
  41. envp = va_arg(ap, char **);
  42. va_end(ap);
  43. return execve(path, argv, envp);
  44. }
  45. }
  46. #endif