Advertisement
cubecube

なんちゃってpty関数

May 27th, 2014
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include <stdlib.h>
  2.  
  3. int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) {
  4. int master, slave;
  5. char name_slave[256];
  6.  
  7. master = open("/dev/ptmx", O_RDWR | O_NONBLOCK);
  8. if (master == -1) {
  9. return -1;
  10. }
  11.  
  12. if (grantpt(master)) {
  13. close(master);
  14. return -1;
  15. }
  16.  
  17. if (unlockpt(master)) {
  18. close(master);
  19. return -1;
  20. }
  21.  
  22. strcpy(name_slave, ptsname(master));
  23. slave = open(name_slave, O_RDWR | O_NOCTTY);
  24. if (slave == -1) {
  25. close(master);
  26. return -1;
  27. }
  28.  
  29. *amaster = master;
  30. *aslave = slave;
  31.  
  32. return 0;
  33. }
  34.  
  35. pid_t forkpty(int *master, char *name, struct termios *tio, struct winsize *ws) {
  36. int slave;
  37. pid_t pid;
  38.  
  39. if (openpty(master, &slave, NULL, NULL, NULL) == -1) {
  40. return -1;
  41. }
  42.  
  43. pid = fork();
  44. if (pid < 0) {
  45. return -1;
  46. } else if (pid == 0) { //child
  47. close(*master);
  48. setsid();
  49. dup2(slave, 0);
  50. dup2(slave, 1);
  51. dup2(slave, 2);
  52. if (slave > 2) {
  53. close(slave);
  54. }
  55. return 0;
  56. }
  57.  
  58. //parent
  59. close(slave);
  60. return pid;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement