Understanding Unix/Linux Programming note:chapter 6:为用户编程:终端控制和信号

Key-word: stty,tcgetattr, tcsetattr, fcntl, signal, 终端驱动程序的模式、阻塞/非阻塞输入

一、内容概要

       Chapter 6的内容是chapter 5内容的应用和扩展。

        用到的chapter 5的内容包括:

        1)使用stty命令设置终端驱动程序的属性:将终端设置为规范/非规范模式;

        2)使用tcgetattr, tcsetattr函数设置终端驱动程序的属性:将终端设置为规范/非规范模式、关闭回显;

        3)使用fcntl函数设置终端驱动程序的属性:将终端设置为阻塞/非阻塞输入;

        (注:由chapter 5的内容知,fcntl通常用来设置磁盘文件的属性,tcsetattr才是用来设置终端设备的属性的。此处可以用tcsetattr函数实现,但是用fcntl实现更为简单)。   

       扩展的内容包括:signal的含义和应用。

二、重要概念:

        1)规范模式:驱动程序输入的字符保存在缓冲区,并且仅在收到回车键时才将这些缓冲的字符发送到程序。

        2)非规范模式:当缓冲和编辑功能被关闭时。(编辑功能指:如用Backspace删除输入的字符的功能;此模式下,在终端输入字符时,无需Enter,字符当即被发送到程序)。

        3)阻塞输入:当调用getchar或read从文件描述符读取输入时,程序阻塞,直到能获得某些字符或是检测到了文件的末尾。

        4)非阻塞输入:当调用getchar或read从文件描述符读取输入时,直接从缓冲区读数据,无论缓冲区有无数据,都接着往下执行。 (通常需要和延时函数sleep一起使用) 。

三、内容组织顺序

       本章通过编写play_again来讲解以上内容。Play_again的功能:向用户提出yes/no的问题,如是否再来一局。

        先后使用了‘一’中列出的知识点来不断完善该程序的功能。

四、signal

1、

        信号是由单个词组成的消息。每个信号都有一个数字编码。

2、信号来自3个地方:

        1)用户。如用户输入:Ctrl-C。

         2)内核。当进程执行出错时,内核给进程发送一个信号。

        3)进程。指两个进程间的通信。

3、如何处理信号

         通过调用signal函数实现对信号的处理,通常的处理方法有一下三种:

       1)接受默认处理(通常是kill掉接收这个信号的进程)

       2)忽略信号

       3)调用一个函数

        当是第三种情况时,非常类似于对中断的处理(中断也是一种信号),中断可以触发设定的函数。

        函数原型:result = signal( int signum, void (* action) (int) )

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值