setpgid.c 463 B

12345678910111213141516171819202122232425262728293031
  1. #include "lib.h"
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <errno.h>
  5. #include "sys9.h"
  6. int
  7. setpgid(pid_t pid, pid_t pgid)
  8. {
  9. int n, f;
  10. char buf[50], fname[30];
  11. if(pid == 0)
  12. pid = getpid();
  13. if(pgid == 0)
  14. pgid = getpgrp();
  15. sprintf(fname, "/proc/%d/noteid", pid);
  16. f = open(fname, 1);
  17. if(f < 0) {
  18. errno = ESRCH;
  19. return -1;
  20. }
  21. n = sprintf(buf, "%d", pgid);
  22. n = write(f, buf, n);
  23. if(n < 0)
  24. _syserrno();
  25. else
  26. n = 0;
  27. close(f);
  28. return n;
  29. }