1定义的
标志是SVR4和43 BSD都支持的,但是他们还各有自己的扩充部分。这些扩充部分
和这两个
系统的各自历史发展过程有关。在115节中将周详讨论这些标志值。
给出了图113中的任何选择项后,如何再能检测和更改终端设备的这些特性呢?图
114摘
要列出了POSIX1所定义的对终端设备进行操作的各个函数。(在97节中已说明
了tcgetpg
rp和tcsetpgrp函数)。
图113〓终端标志
图114〓POSIX1终端I/O函数摘要
注意,对终端设备,POSIX1没有使用ioctl,代之他使用了图114中示出的12个
函数。所
以这样做的理由是:对于终端设备的ioctl函数,其最后一个参数的数据类型随执
行动作的
不同而不同。
虽然只有12个函数对终端设备进行操作,但是应当理解的是,图114中头两个函
数tcgetat
tr和tcsetattr处理大约50种不同的标志(图113)。对于终端设备有大量选择项可
供使用,
对于一个特定设备(终端、调制解调器、激光打印机等等)又要决定所需的选择项,
这些都使
对终端设备的处理变得复杂起来。
图114中列出的12个函数之间的关系示于图115中。
图115〓和终端有关的函数之间的关系
POSIX1没有规定在termios结构中何处存放波特率信息,这是个依赖于实现的
特性。很
多较早的系统将此信息存放在c-cflag字段中。43 BSD则在此结构中有两个分开
的字段〖
CD2〗一个存放输入速度,另一个则存放输出速度。
113〓特别输入字符
POSIX1定义了11个在输入时作特别处理的字符。SVR4另外加了6个特别字符,4
3 BSD则
加了7个。图116摘要列出了这些特别字符。
图116〓终端特别输入字符摘要
在POSIX1的11个特别字符中,我们可将其中9个更改为几乎任何值。不能更改的
两个特别
字符是新行符和回车符(\n和\r),有些实施也不允许更改STOP和START字
符。为了
进行修改,只要更改termios结构中,c-cc数组的相应项。该数组中的元素都用名
字作为下
标进行引用,每个名字都以字母V开头(见图116中的第3列)。
POSIX1可选地允许我们禁止使用这些字符。若-POSIX-VDISABLE有效,则-POSIX
-DISABLE
的值可存放在c-cc数组的相应项中的禁止使用该特别字符。能够用pathconf和fpa
theonf函
数查询此特征(254节)。
FIPS151-1需要支持-POSIX-VDISABLE。
SVR4和43 BSD也支持此特性。SVR4将-POSIX-VDISABLE定义为0,而43 BSD则将
其定义为
八进制数377。
某些早期的Unix系统所用的方法是:若相应的特别输入字符是O,则禁止使用该字
符。
实例
在周详说明各特别字符之前,先看一个更改特别字符的程式。程式11禁用中断字
符,并将
文档结束符配置为Control-B。
P332〓
程式111〓禁止中断字符和更改文档结束字符
对此程式要说明下列几点:
1仅当标准输入是终端设备时才修改终端特别字符。isattg(见图119节)用于进
行这种检
测。
2用fpathconf取-POSIX-VDISABLE值。
3函数tcgetattr(114节)从系统核存取termios结构。在修改了此结构后,调用
tcsetatt
r配置属性,这样就进行了我们所希望的修改。
4禁止使用中断键和忽略中断信号是不同的。程式111所做的是禁止使用使终端
驱动程式
产生SIGINT的特别字符。我们仍可使用kill函数向进程发送该信号。
下面较周详地说明各个特别字符。我们称这些字符为特别输入字符,但是其中有两
个字符,
STOP和START(Control-S和Control-D)在输出时也对他们进行特别处理。注意,这
些字符中
的大多数在被终端驱动程式识别并进行特别处理后都被丢弃,并不将他们传送给执
行读终端
操作的进程。例外的字符是新行符(NL,EOL,EOL2)和回车符(CR)。
CR〓POSIX1的回车符。不能更改此字符。以规范方式进行输入时识别此字符。当
配置了IC
ANON(规范方式)和ICRNL(将CR映照为NL)连同没有配置IGNCR(忽略CR)时,将CR转换
成NL,并
产生和NL符相同的作用。
此字符返回给读进程(多半是在转换成NL后)。
DISCARD〓SVR4和43 BSD的删除符。在扩充方式下(IEXTEN),在输入中识别此字
符。在输
入另一个删除符之前或删除文档被清除之前(见FLUSHO选项)此字符使后续输出都被
删除。在
处理后此字符即被删除,不送向读进程。
DSUSP〓SVR4和43 BSD的延迟-挂起作业控制字符。在扩充方式下,若作业控制被
挂起并且
ISIG标志被配置,则在输入中识别此字符。和SUSP字符的相同处是:延迟-挂起字
符产生SIG
TSTP信号,他被送至前台进程组中的任何进程(见图97)。但是并不是键入此字符
时,而是
在一个进程读控制终端时,此延迟-挂起字符才送向进程组。在处理后,此字符即
被删除,
不送向读进程。
EOF〓POSIX1的文档结束符。以规范方式进行输入时识别此字符。当键入此字符
时,等待
被读的任何字节都立即传送给读进程。假如没有字节等待读,则返回O。在行首输
入一个EOF
符是向程式指示文档结束的正常方式。在处理后,此字符即被删除,不送向读进程
。
EOL〓POSIX1附加的行定界符,和NL作用相同。以规范方式进行输入时识别此字
符。
通常不使用此字符。此字符返回给读进程。
EOL2〓SVR4和43 BSD的附加行定界符和NL作用相同。以规范方式输入时识别此字
符。
ERASE〓POSIX1的擦除字符(退格)。以规范方式输入时识别此字符。他擦除行中
的前一个
字符,但不会超越行首字符擦除上一行中的字符。在处理后此字符即被擦除,不送
向读进程
。
INTR〓POSIX1的中断字符。若配置了ISIG标志,则在输入中识别此字符。他产生
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



