当前位置: 技术问答>linux和unix
有段程序看不明白,请高人指导?
来源: 互联网 发布时间:2016-03-21
本文导语: 下面一段程序是VGALIB源程序里的一小段,它放在初始化VGA寄存器的前面.我在网上查到TCGETS是取串口状态的命令,不知为什么要在这里用这段程序?请高人帮我看看.谢谢! /* save text mode termio parameters */ ioctl(0, TC...
下面一段程序是VGALIB源程序里的一小段,它放在初始化VGA寄存器的前面.我在网上查到TCGETS是取串口状态的命令,不知为什么要在这里用这段程序?请高人帮我看看.谢谢!
/* save text mode termio parameters */
ioctl(0, TCGETS, &text_termio);
graph_termio = text_termio;
/* change termio parameters to allow our own I/O processing */
graph_termio.c_iflag &= ~(BRKINT|PARMRK|INPCK|IUCLC|IXON|IXOFF);
graph_termio.c_iflag |= (IGNBRK|IGNPAR);
graph_termio.c_oflag &= ~(ONOCR);
graph_termio.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|NOFLSH);
graph_termio.c_lflag |= (ISIG); /* enable interrupt */
graph_termio.c_cc[VMIN] = 1;
graph_termio.c_cc[VTIME] = 0;
graph_termio.c_cc[VSUSP] = 0; /* disable suspend */
disable_interrupt();
/* save text mode termio parameters */
ioctl(0, TCGETS, &text_termio);
graph_termio = text_termio;
/* change termio parameters to allow our own I/O processing */
graph_termio.c_iflag &= ~(BRKINT|PARMRK|INPCK|IUCLC|IXON|IXOFF);
graph_termio.c_iflag |= (IGNBRK|IGNPAR);
graph_termio.c_oflag &= ~(ONOCR);
graph_termio.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|NOFLSH);
graph_termio.c_lflag |= (ISIG); /* enable interrupt */
graph_termio.c_cc[VMIN] = 1;
graph_termio.c_cc[VTIME] = 0;
graph_termio.c_cc[VSUSP] = 0; /* disable suspend */
disable_interrupt();
|
没错,先取得当前字符方式下终端(一般是控制台,文件描述符为0)的属性
(存放在text_termio,也许在退出图形模式时还需要回复原来的终端属性),
然后根据图形模式的需要进行相应设置。
|
ioctl(0, TCGETS, &text_termio);
获取设备状态的数据结构,0是代表是输入设备。
这段是初始化的一部分
获取设备状态的数据结构,0是代表是输入设备。
这段是初始化的一部分
|
TCGETS应该是读取寄存器状态的命令,不管是串口还是VGA端口
你看ioctl后面跟着的是设备0
你看ioctl后面跟着的是设备0