6-current totally hangs by this program, from user, not root. No responds on keys pressed, Control-Alt-ESC, switching console and etc. System run in infinite loop in sys/kern/tty.c:ttread() === read: splx(s); /* * Input present, check for input mapping and processing. */ first = 1; if (ISSET(lflag, ICANON | ISIG)) goto slowcase; for (;;) { char ibuf[IBUFSIZ]; int icc; icc = imin(uio->uio_resid, IBUFSIZ); /* XXX uio_resid==0 => icc=0 */ icc = q_to_b(qp, ibuf, icc); /* icc == 0 */ if (icc <= 0) { if (first) goto loop; === #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <termios.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #define cfmakeraw(ptr) (ptr)->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR\ |IGNCR|ICRNL|IXON);\ (ptr)->c_oflag &= ~OPOST;\ (ptr)->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);\ (ptr)->c_cflag &= ~(CSIZE|PARENB);\ (ptr)->c_cflag |= CS8 int main(int argc, char *argv[]) { int fd, i; char *buf[1024]; struct termios tcn; if ((fd = open("/dev/tty", O_RDWR | O_NONBLOCK)) == -1) { return -1; /* errno already set */ } /* Set the tty to raw and to the correct speed */ tcgetattr(fd, &tcn); tcn.c_oflag = 0; tcn.c_iflag = IGNBRK | IGNPAR; tcn.c_cflag = CREAD | CLOCAL | CS8; tcn.c_lflag = NOFLSH; cfmakeraw(&tcn); for (i = 0; i < 16; i++) tcn.c_cc[i] = 0; tcn.c_cc[VMIN] = 1; tcn.c_cc[VTIME] = 0; tcsetattr(fd, TCSANOW, &tcn); if ((i = fcntl(fd, F_GETFL, 0)) != -1) { i &= ~O_NONBLOCK; fcntl(fd, F_SETFL, i); } read(fd, buf, 0); } -- Slawa OlhovchenkovReceived on Sun Jan 02 2005 - 12:06:32 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC