ioctl.c 561 B

123456789101112131415161718192021222324252627282930313233
  1. /* posix */
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #include <fcntl.h>
  9. #include <sys/stat.h>
  10. /* bsd extensions */
  11. #include <sys/uio.h>
  12. #include <sys/socket.h>
  13. #include <sys/ioctl.h>
  14. int
  15. ioctl(int fd, unsigned long request, void* arg)
  16. {
  17. struct stat d;
  18. if(request == FIONREAD) {
  19. if(fstat(fd, &d) < 0) {
  20. errno = EBADF;
  21. return -1;
  22. }
  23. /* this works if the file is buffered somehow */
  24. *(long*)arg = d.st_size;
  25. return 0;
  26. } else {
  27. errno = EINVAL;
  28. return -1;
  29. }
  30. }