pipe.c 476 B

12345678910111213141516171819202122232425262728293031
  1. #include <errno.h>
  2. #include "lib.h"
  3. #include "sys9.h"
  4. int
  5. pipe(int fildes[2])
  6. {
  7. Fdinfo *fi;
  8. int i;
  9. if(!fildes){
  10. errno = EFAULT;
  11. return -1;
  12. }
  13. if(_PIPE(fildes) < 0)
  14. _syserrno();
  15. else
  16. if(fildes[0] < 0 || fildes[0]>=OPEN_MAX ||
  17. fildes[1] < 0 || fildes[1]>=OPEN_MAX) {
  18. errno = EMFILE;
  19. return -1;
  20. }
  21. for(i = 0; i <=1; i++) {
  22. fi = &_fdinfo[fildes[i]];
  23. fi->flags = FD_ISOPEN;
  24. fi->oflags = O_RDWR;
  25. fi->uid = 0; /* none */
  26. fi->gid = 0;
  27. }
  28. return 0;
  29. }