手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

第11章 终端I/O

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

所以输入
都变换为小写。为了输入一个大写字符,在其前加一个'\'。相类似,输出一
个大写
字符也在其前加一个'\'。(这一标志已过时,现在几乎任何终端都支持大、
小写字
符)。
116〓stty命令
上节说明的任何选择项,在程式中都可用tcgetattr和tcsetattr函数(114节)进
行检查和
更改。在命令行中则用stty(1)命令进行检查和更改。stty(1)命令是图114中所
列的头6个
函数的界面。假如以-a选项执行此命令,则显示任何终端选择项:
$ stty -a
speed 9600 baud;34 rows;80 columns;
lflags:icanon isig iexten echo echoe echok echoke-echon1 echoct1 -echop
rt -altwe
rase -noflsh -tostop -mdmbuf -flusho -pendin -nokerninfo -extproc
iflags:istrip icrn1 -inlcr -igncr ixon -ixoff ixany imaxbel -ignbrk brk
int -inpc
k -ignpar -parmrk
oflags:opost onlcr -oxtabs
cflags:cread cs7 parenb -parodd hupcl -clocal -cstopb -crtscts
cchars:discard=^O;dsusp=^Y;eof=^D;eol=<undef>;
eol2=<undef>;erase=^H;intr=^?;kill=^U;inext=^V;
quit=^\;reprint=^R;start=^Q;status=^t;stop=^S;
susp=^Z;werase=^W;
若在选项名前有一个连字符,表示该选项禁用。最后四行显示各终端特别字符的设
置(113
节)。第1行显示当前终端窗口的行数和列数,我们将在1112节中对此进行讨论。

因为stty命令是一条用户命令,而不是个操作系统函数,所以他由POSIX2说明
。
系统V的stty在标准输入进行操作,将任何输出写到标准输出上。Version 7和BSD
系统则在
标准输出上进行操作,将任何输出写到标准出错文档上。POSIX2的最近草案采用
系统V的
方法,43 BSD也这样做。
Version 7的stty手册页是1页,SVR4版本的stty手册页则是6页。终端驱动程式趋
向于使用
愈来愈多的选择项。
117〓波特率函数
波特率(baud rate)是个历史沿用的术语,现在他指的是"每秒二制位数"。虽然
大多数
终端设备对输入和输出使用同一波特率,但是只要硬件许可,能够将他们配置为两
个不同值
。
# include<termios.h>
speed-t cfgetispeed9const struct termios * termptr);
speed-t cfgetospeed(const struct termios *termptr);
Both return:baud rate value
两个函数返回:波特率值
int cfsetispeed(struct termios *termptr,speed-t speed);
int cfsetospeed(struct termios *termptr,speed-t speed;
Both return:0if oK,-1 onerror
两个函数返回:若成功为0,出错为-1。
两个cfget函数的返回值,连同两个cfset函数的speed参数都是下列常数之一:

B50、B75、B110、B134、B150、B200、B300、B600
、B12
00、B1800、B2400、B4800、B9600、B19200或B3
8400
。常数B0表示"挂断"。在调用tcsetattr时将输出波特率指定为B0,则调制解调器
的控制
线就不再起作用。
为了使用这些函数应当理解输入、出波特率是存放在图115所示的设备termios结
构中的。
在调用任一cfget函数之前,先要用tcgetattr获得设备的termios结构。和此类似
,在调用
任一cfset函数后,应将波特率配置到termios结构中。为使这种更改影响到设备,
应当调用
tcsetattr函数。
假如所配置的波特率有错,则在调用tcsetattr之前,不会发现这种错误。
18〓行控制函数
下列四个函数提供了终端设备的行控制能力。其中,参数filedes引用一个终端设
备,否则
出错返回,erno配置为ENOTTY。
# include<termios.h>
int tcdrain(int filedes);
int tcflow(int filedes,int action);
int tcflush(int filedes,int queue);
int tcsendbreak(int filedes,int duration);
All four return:0 if OK,-1 on error
四个函数返回:若成功为0,出错为-1
tcdrain函数等待任何输出都被发送。tcflow使我们对输入和输出流控制进行控制
。action
参数应当是下列四个值之一。
TCOOFF〓输出被挂起。
TCOON〓以前被挂起的输出被重新起动。
TCIOFF〓系统发送一个STOP字符。这将使终端设备暂停发送数据。
TCION〓系统发送一个START字符。这将使终端恢复发送数据。
tcflush函数刷清(抛弃)输入缓存(终端驱动程式已接收到,但用户程式尚未读)或
输出缓存(
用户程式已写,但尚未发送)。queue参数应当是下列三个常数之一:
TCIFLUSH〓刷清输入队列。
TCOFLUSH〓刷清输出队列。
TCIOFLUSH〓刷清输入、输出队列。
tcsendbreak函数在一个指定的时间区间内发送连续的0二进位流。若duration参数
为0,则
此种发送延续025-05秒之间。POSIX.1说明若duration非0,则发送时间依赖于
实现。
SCR4 SVID说明若duration非0,则不发送0二进位。但是,SCR4手册页中说,若du
ration非0
,则tcsendbreak的行为和tcdrain相同。另一个系统手册页则说,若duration非0
,则传送0
二进位的时间是duration X N,其中N在025-05秒之间。从中可见,如何处理
这种条件
还会统相同式。
119〓终端标识
历史沿袭至今,在大多数Unix系统中,控制终端的名字是/dev/tty。POSIX1提
供了一个
运行时函数,可被调用来决定控制终端的名字。
# include<stdio.h>
char * ctermid(char *ptr);
Returns:(see following)

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!