在POSIX _POSIX_VDISABLE值中,如果为-1,则所有终端设备文件的特殊字符都没有禁用字符;否则该值是禁用字符值..
请任何人帮助我理解这一点。我无法得到这个的确切含义。
请
答案 0 :(得分:3)
如果查看definition of special characters,那应该是(thre'-1'值),所有这些特殊字符都是活动的:
在规范输入中,终端驱动程序识别出许多执行各种控制功能的特殊字符 其中包括用于编辑输入的
ERASE
字符(通常为 DEL )以及其他编辑字符。
用于发送SIGINT
信号的INTR字符(通常为 Ctrl - c )以及其他信号提升字符可以在规范或非规范输入模式下使用
你有很多这些特殊的角色:
已经提出了一个问题,看看1997年是否such a value was portable(总是编译):
第2.9.4节中的措辞:
如果表2-11中的任何常量被定义为在头文件中具有值-1
可以在随意阅读时建议使用以下代码来最小化尺寸 并优化每个实施的效率:
#ifdef _POSIX_VDISABLE
#if _POSIX_VDISABLE == -1
/* code that assumes no vdisable capability */
#else
/* code that assumes vdisable capability */
#endif
#else
/* code that uses pathconf() to determine vdisable capability */
#endif
interpretation #34暗示它会。
通过在COMPILE-TIME使用这些值,便携式POSIX.1应用程序可以避免在定义符号时加载与表2-11中的符号关联的所有pathconf()相关代码。
答案 1 :(得分:2)
我的终端有特殊键,比如^ C来中断,^ \来转储核心,^ W来擦除一个字,^ U来擦除一行。 xterm和其他终端仿真器中存在特殊密钥,但它们在每个终端中都不相同。 POSIX应用程序可以在< termios.h>中调用tcgetattr()或tcsetattr()。获取或设置这些特殊键。他们还可以禁用某些键,例如:
tcgetattr(fd, tp);
tp->c_lflag &= ~ISIG; /* disable all the signal keys */
tp->c_cc[WERASE] = _POSIX_VDISABLE; /* disable the word-erase key */
tcsetattr(fd, tp);
在POSIX.1-2001之前,对_POSIX_VDISABLE的支持是可选的。有三种可能性:
pathconf("/dev/tty", _PC_VDISABLE)
这样的调用会返回该终端的值,如果该终端没有值来禁用特殊键,则返回-1。当系统添加< termios.h>时,所有或几乎所有系统都定义_POSIX_VDISABLE而不是-1。我查看了the Unix tree中的一些旧系统。所有Minix 1.5(1989),Linux 0.96c(1992)和4.4BSD(1993)都定义了_POSIX_VDISABLE而不是-1。 (在POSIX之前,< termios.h>不存在,并且系统使用另一个标头,例如< sgtty.h>来配置终端。)
POSIX-1.2001只需要定义_POSIX_VDISABLE而不是-1。 POSIX.1-2001 said for <unistd.h>,
_POSIX_VDISABLE
该符号应定义为一个字符的值,该字符将禁用<termios.h>中描述的终端特殊字符处理。此符号应始终设置为-1以外的值。
作为修订版的一部分,在POSIX.1-1990标准上使用FIPS 151-2配置文件的选项已经发生了一些调整。现在必须使用POSIX.1-1990标准中的以下选项:
- _POSIX_JOB_CONTROL
- _POSIX_SAVED_IDS
- _POSIX_VDISABLE