`

终端属性和选项标志

阅读更多
    tcgetattr 和 tcsetattr 函数可以分别获取和设置 termios 结构,这样就可以检测和修改各种终端选项标志和特殊字符。
#include <termios.h>
int tcgetattr(int fd, struct termios *termptr);
int tcsetattr(int fd, int opt, const struct termios *termptr);
                   /* 两个函数的返回值:若成功,返回 0;否则,返回 -1 */

    其中指向 termios 结构的指针参数 termptr 或者返回当前终端的属性,或者设置该终端的属性。这两个函数只对终端设备进行操作,若 fd 参数没有引用终端设备,则出错返回 -1,并将 errno 设置为 ENOTTY。
    tcsetattr 的参数 opt 可以指定新的终端属性何时起作用。它支持以下几个常量。
    * TCSANOW:更改立即发生。
    * TCSADRAIN:发送了所有输出后更改才发生。若更改输出参数则应使用此选项。
    * TCSAFLUSH:发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被丢弃(冲洗)。
    注意,tcsetattr 函数即使未能执行所有要求的动作也会返回 OK,这意味着在调用该函数设置所希望的属性后,需调用 tcgetattr 来检测实际的终端属性与所希望的属性是否有区别。
    终端第一次被打开时的属性视具体情况而定。一些系统可能会初始化为具体实现所定义的值,另一些可能会保留并使用最后一次使用终端时的属性值。通过打开一个带有 O_TTY_INIT(见不带缓冲的文件I/O之open)标志的驱动设备,可以确认终端的行为是否遵循标准,这样就能在调用 tcgetattr 时确保初始化 termios 结构中的任何非标准部分,使得在获取和修改终端属性时,终端的表现符合预期。

    在终端 I/O 综述一节列出了影响终端的选项标志,其中所有的选项标志(除所谓的屏蔽字标志外)都用一位或多位(设置或清除)表示。屏蔽字标志定义多个位,它们组合在一起,可以定义一组值。屏蔽字标志有一个定义名,每个值也有一个名字。例如,为了设置字符长度,首先用字符长度屏蔽字标志 CSIZE 将表示字符长度的位清 0,然后设置这几个值之一:CS5、CS6、CS7、CS8。
    由 Linux 和 Solaris 支持的 6 个延迟值也有屏蔽字标志:BSDLY、CRDLY、FFDLY、NLDLY、TABDLY 和 VTADLY。在所有情况下,延迟屏蔽字为 0 就表示没有延迟。如果指定了延迟,则由 OFILL 和 OFDEL 标志决定是由驱动器进行实际延迟还是只传输填充字符。
    下面这个程序演示了如何使用这些屏蔽字标志取一个值或者设置一个值。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>

int main(void){
	struct termios	term;
	if(tcgetattr(STDIN_FILENO, &term) < 0){
		printf("tcgetattr error\n");
		exit(1);
	}
	switch(term.c_cflag & CSIZE){
	case CS5:
		printf("5 bits/byte\n");
		break;
	case CS6:
		printf("6 bits/byte\n");
		break;
	case CS7:
		printf("7 bits/byte\n");
		break;
	case CS8:
		printf("8 bits/byte\n");
		break;
	default:
		printf("unknown bits/byte\n");
	}
	term.c_cflag &= ~CSIZE;		// zero out the bits
	term.c_cflag |= CS8;		// set 8 bits/byte
	if(tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0){
		printf("tcsetattr error\n");
		exit(1);
	}
	exit(0);
}

    下面是按字母顺序对终端 I/O 综述中列出的所有终端选项标志的详细说明,同时也指出了它们所属的终端标志字段以及支持的平台。






  • 大小: 51.5 KB
  • 大小: 68 KB
  • 大小: 69.4 KB
  • 大小: 69.9 KB
  • 大小: 68.2 KB
  • 大小: 19.7 KB
  • 大小: 14.8 KB
分享到:
评论

相关推荐

    使用tcgetattr函数与tcsetattr函数控制终端.doc

    = 0) { /* 获取终端属性 */ perror("tcgetattr"); return 1; } printf("Current terminal settings:\n"); printf("Input Flags: %x\n", options.c_iflag); printf("Output Flags: %x\n", options.c_oflag); ...

    tcsetattr函数[总结].pdf

    `tcsetattr`函数是Linux系统中的一个用于设置终端属性的关键函数,主要应用于软件开发中对终端设备的控制,如控制台交互或者串口通信。它允许程序员改变终端的行为,如输入输出模式、波特率、控制字符等。这个函数...

    应用笔记AN5732+在+STM32WB+系列上开发+Zigbee睡眠终端设备

    在STM32WB系列微控制器上开发Zigbee睡眠终端设备时,需要特别注意低功耗模式的设计与优化,以及如何高效地实现数据传输和网络接入。通过合理配置ZbStartupT结构体和利用双向镜像机制,可以构建出既节能又高效的...

    UNIX环境高级编程_第二版中文

    18.4 获得和设置终端属性  18.5 终端选项标志  18.6 stty命令  18.7 波特率函数  18.8 行控制函数  18.9 终端标识  18.10 规范模式  18.11 非规范模式  18.12 终端的窗口大小  18.13 termcap,...

    《计算机操作系统》试题

    27. 进程属性:进程具有并发性和动态性。选项A正确。 28. PCB:操作系统通过进程控制块(PCB)来管理进程,它是进程存在的唯一标志。选项D正确。 29. 磁盘读写单位:磁盘的读写单位通常是扇区。选项B正确。 30. ...

    TERMIOS详解.pdf

    这些成员变量和标志位的组合,使得开发者能够精细控制终端的行为,无论是对于串口通信的优化,还是在特定应用环境中对输入输出的定制化需求,都能找到相应的支持。 总之,TERMIOS虽源自旧时代,但在嵌入式开发、...

    操作系统考试题

    5. 错误,程序是静态实体,PCB是进程动态属性的表示,两者都是进程存在的标志。 6. 错误,除了释放PCB,还需要释放其他资源。 7. 正确,P-V原语可以用于进程同步和互斥。 8. 错误,简单轮转法不考虑优先级,所有...

    UNIX环境高级编程(第二版中文)

    18.4 获得和设置终端属性 516 18.5 终端选项标志 516 18.6 stty命令 522 18.7 波特率函数 523 18.8 行控制函数 524 18.9 终端标识 524 18.10 规范模式 529 18.11 非规范模式 532 18.12 终端的窗口...

    unix环境编程电子书

    505 习题 505 第18章 终端I/O 507 18.1 引言 507 18.2 综述 507 18.3 特殊输入字符 512 18.4 获得和设置终端属性 516 18.5 终端选项标志 516 18.6 stty命令 522 18.7 波特率函数 523 18.8 行控制...

    UNIX环境高级编程_第2版.part1

    18.4 获得和设置终端属性516 18.5 终端选项标志516 18.6 stty命令522 18.7 波特率函数523 18.8 行控制函数524 18.9 终端标识524 18.10 规范模式529 18.11 非规范模式532 18.12 终端的窗口大小537 18.13 ...

    UNIX环境高级编程_第2版.part2

    18.4 获得和设置终端属性516 18.5 终端选项标志516 18.6 stty命令522 18.7 波特率函数523 18.8 行控制函数524 18.9 终端标识524 18.10 规范模式529 18.11 非规范模式532 18.12 终端的窗口大小537 18.13 ...

    Linux.命令全集.pdf

    `chattr` 命令用于更改文件属性,通常用于设置或清除文件的特殊标志。 - **基本语法**: `chattr [选项] 属性 文件名` - **常见选项**: - `+i`: 设置文件不可改变(immutable)属性。 - `-i`: 清除文件不可改变...

    21春北京理工大学《汽车网络技术》在线作业参考答案.docx

    25. CAN属性:CAN协议具有报文优先权、保持延迟时间设置灵活性、系统内数据的连贯性和多主机多终端支持等特点。 26. 多主机多终端:这种终端配置方法可以通过不改变终端电缆的DC特性来增强EMC性能,是正确的。 27....

    时间结构体详解

    `termios`结构体是Unix/Linux系统中用于配置终端输入输出属性的一个关键数据结构。它允许应用程序控制终端的行为,比如如何处理输入数据、如何格式化输出数据等。下面我们将详细解析`termios`结构体中各个成员的具体...

    Linux常用命令讲解.pdf

    **功能**:`chattr` 命令用于更改文件属性,特别是在ext文件系统上设置文件的特殊标志。 **语法**: ``` chattr [选项] [文件名] ``` **选项**: - `+i`:设置文件的不可改变标志。 - `-i`:清除文件的不可改变...

    无线网卡怎么用,无线网卡使用方法.docx

    2. **设置无线网络属性**:在弹出的“无线网络属性”窗口中,填写一个唯一的“服务设置标志(SSID)”,例如“001”,取消勾选“自动为我提供密钥”,并将数据加密选项设置为“已禁用”。 3. **保存设置**:点击...

    去除Ubuntu文件夹有锁标志的方法

    在Ubuntu的Nautilus文件管理器中,可以通过右键点击文件夹,选择“属性”,然后在“权限”选项卡中更改权限设置。但这同样不会改变子文件和子文件夹的权限,所以可能需要手动逐个更改。 在执行任何更改权限的操作...

    AIX常用命令详解中文版

    若使用`-o`选项,则按照顺序输出日志文件中的所有条目至标准输出设备,如终端屏幕。 - **记录数据到指定日志文件**:使用`alog -f LogFile`命令时,可以将标准输入的数据写入指定的日志文件中。若结合`-q`标志使用...

    vxworks6.6调试环境的建立

    这可以通过在工程的属性设置中,选择“C编译器”和“C++编译器”的“工具标志”来实现。 完成代码编写后,执行“重建项目”以编译整个工程。编译成功后,便进入了调试阶段。在Workbench中,选择“目标”-&gt;“新建...

Global site tag (gtag.js) - Google Analytics