Jan Klemkow 5 년 전
부모
커밋
da549bbe46
1개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  1. 14 3
      ptty.c

+ 14 - 3
ptty.c

@@ -93,6 +93,7 @@ main(int argc, char *argv[])
 	if (closeflag && close(mfd) == -1)
 		die("close:");
 
+	int pfds = 2;
 	struct pollfd pfd[2] = {
 		{ STDIN_FILENO, POLLIN, 0},
 		{ mfd,          POLLIN, 0}
@@ -103,13 +104,18 @@ main(int argc, char *argv[])
 		ssize_t n;
 		int r;
 
-		if ((r = poll(pfd, 2, -1)) == -1)
+		if ((r = poll(pfd, pfds, -1)) == -1)
 			die("poll:");
 
 		if (pfd[0].revents & POLLIN) {
 			if ((n = read(STDIN_FILENO, buf, sizeof buf)) == -1)
 				die("read:");
-			if (n == 0) break;
+			if (n == 0) {
+				close(mfd);
+				//pfds = 1;
+				pfd[0].fd = -1;
+				break;
+			}
 			if (write(mfd, buf, n) == -1)
 				die("write:");
 		}
@@ -122,7 +128,12 @@ main(int argc, char *argv[])
 				die("write:");
 		}
 
-		if (pfd[0].revents & POLLHUP || pfd[1].revents & POLLHUP)
+		if (pfd[0].revents & POLLHUP) {
+			//pfds = 1;
+			pfd[0].fd = -1;
+			close(mfd);
+		}
+		if (pfd[1].revents & POLLHUP)
 			break;
 	}