fork download
  1. #include "unistd.h"
  2. #include "fcntl.h"
  3. #include "stdlib.h"
  4. #include "sys/select.h"
  5. #include "stdio.h"
  6.  
  7. int main() {
  8. int master_fd = posix_openpt(O_RDWR | O_NOCTTY | O_NONBLOCK);
  9. char* slave_name = ptsname(master_fd);
  10. unlockpt(master_fd);
  11. grantpt(master_fd);
  12. printf("master_fd = %d, slave = %s\n", master_fd, slave_name);
  13.  
  14. // If omitted, select will start returning immediately without setting master_fd in fds after a client opens and closes slave ttys once
  15. int slave_fd = open(slave_name, O_RDONLY);
  16.  
  17. fd_set fds;
  18. FD_ZERO(&fds);
  19.  
  20. while (1) {
  21. FD_SET(master_fd, &fds);
  22.  
  23. int ret = select(master_fd+1, &fds, NULL, NULL, NULL);
  24. printf("select ret = %d ", ret);
  25. if (FD_ISSET(master_fd, &fds)) {
  26. char c = 0;
  27. int r = read(master_fd, &c, 1);
  28. printf("r = %d, c = '%c'\n", r, c);
  29. write(master_fd, &c, 1);
  30. } else {
  31. printf("master_fd is not set in fds\n");
  32. }
  33. }
  34.  
  35. return 0;
  36. }
Runtime error #stdin #stdout #stderr 0s 5536KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
*** buffer overflow detected ***: ./prog terminated