首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用termios -无法将奇偶校验设置为even,出现EINVAL错误

termios是一个用于控制终端I/O的POSIX标准库。它提供了一组函数和数据结构,用于配置和控制终端设备的各种属性,包括奇偶校验。

在使用termios设置奇偶校验时,如果出现EINVAL错误,可能是由于以下原因之一:

  1. 终端设备不支持奇偶校验设置为even。不是所有的终端设备都支持所有的奇偶校验模式。在设置奇偶校验之前,可以使用tcgetattr函数获取当前终端属性,并检查c_iflag字段中的PARENB标志位是否被设置。如果该标志位未被设置,表示终端设备不支持奇偶校验。
  2. 错误的参数。在设置奇偶校验时,需要正确设置termios结构体中的c_cflag字段。可以使用位掩码操作来设置奇偶校验模式。例如,设置奇偶校验为even可以使用如下代码:
代码语言:txt
复制
#include <termios.h>

struct termios options;
tcgetattr(fd, &options);  // 获取当前终端属性

options.c_cflag |= PARENB;  // 启用奇偶校验
options.c_cflag &= ~PARODD;  // 设置奇偶校验为even

tcsetattr(fd, TCSANOW, &options);  // 设置终端属性

在上述代码中,fd是打开的终端设备文件描述符。

关于termios和终端设备的更多信息,可以参考腾讯云的产品文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 终端I/O---ttyS3: 3 inp

    #include <stdio.h> #include "time.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> int main() {   struct termios opt;   int fd=-1;   int nread;   char buf[1024];   fd=open("/dev/ttyS3" ,O_RDONLY    |O_NONBLOCK); if(fd==-1)    {    printf("open /dev/ttyS3 error\n");    }   tcgetattr(fd,&opt);              //获取终端属性到opt   tcflush(fd,TCIOFLUSH);              //同时刷新收到的数据但是不读,刷新写入的数据但是不传送   cfsetispeed(&opt, B9600);                 //设置输入波特率   cfsetospeed(&opt, B9600);             //设置输出波特率   opt.c_cflag&=~CSIZE;              //(不用     )字符长度掩码。取值为 CS5, CS6, CS7, 或 CS8。   opt.c_cflag |=CS8;              //取值为CS8   opt.c_cflag &= ~PARENB;              //(不用     )允许输出产生奇偶信息以及输入的奇偶校验。   opt.c_iflag &= ~INPCK;              //(不用     )启用输入奇偶检测。   opt.c_cflag &= ~CSTOPB;              //(不用     )设置两个停止位,而不是一个   opt.c_cflag &= ~CRTSCTS;              //(不用     )硬件流控   opt.c_cc[VTIME] = 150;              //非 canonical 模式读时的延时,以十分之一秒为单位   opt.c_cc[VMIN] = 0;                      //非 canonical 模式读的最小字符数   opt.c_lflag    &= ~(ICANON | ECHO) ;              //(不用     )启用标准模式 (canonical mode)允许使用              //特殊字符 EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT,               //和 WERASE,以及按行的缓冲。              //(不用     )回显输入字符。   tcflush(fd,TCIOFLUSH);   tcsetattr(fd,TCSANOW,&opt);              //改变立即发生 while(1)     {         nread = read(fd,buf,1000);         //printf("nread=%d\n",nread);         //if(nread !=-1 )    printf("%s",buf);//打印数据         sleep(2);         memset(buf,0x0,1024);     } if(fd!=-1) close(fd);   return 0; }

    01

    RK平台 USB转RS485

    RS-232是美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接。 RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业联盟,RS(Recommended standard)代表推荐标准,232是标识号,C代表RS232的第三次修改(1969年),在这之前,还有RS232B、RS232A. 在RS-232标准中,字符是以一串行的比特串来一个接一个的串列(serial)方式传输,优点是传输线少,配线简单,发送距离可以较远。 最常用的编码格式是异步起停(asynchronous start-stop)格式,它使用一个起始比特后面紧跟7或8个数据比特(bit),然后是可选的奇偶校验比特,最后是一或两个停止比特。所以发送一个字符至少需要10比特,带来的一个好的效果是使全部的传输速率,发送信号的速率以10划分。

    01

    RAID原理基础

    RAID原理基础: 内存的速度可以达到5G每秒。甚至更高 现代硬盘的缺陷:IO性能极弱,稳定性极差; RAID:廉价磁盘冗余阵列技术是通过该多磁盘并行运行来提高计算机的存储IO性能。 RAID分为很多种类,称之为RIAD级别。现代RIAD共有7类,常用的有以下四类: RAID 0 读写性能 RAID 1 读取性能、冗余性(空间利用率最高,性能最高) RAID 5 读写性能、冗余性 (最多损坏1块硬盘) RAID 6 读写性能、冗余性 (最多损坏2块硬盘) RAID 0 最少使用 2 块硬盘;将数据分开读写到多块硬盘的方式来提高读写性能。读写速度是所有硬盘的速度之和。空间利用率也是所有硬盘空间之和、没有冗余能力。 RAID 1 也是最少使用 2 块硬盘。写数据时,将数据复制写到多块硬盘。读数据时,为了提供冗余性,同时从多块硬盘读取数据,提高了读取的性能。优点:读性能强,写性能微弱。冗余能力最强. 缺点:磁盘利用率比较低,空间利用率为磁盘中最小的那块。 RAID 5 最少使用3块硬盘,与RAID相似,读写数据时会将数据分布式的读写到所有硬盘上。写数据时会对数据进行奇偶校验运算;将校验信息同时保存在硬盘上,校验信息用于数据恢复时使用。读性能很强与RAID 0接近。写性能较RAID0弱一些;最多可以接受1块硬盘的损坏。 空间利用率为1-1/n(1/n代表奇偶校验所占的空间) RAID 6 最少使用4块硬盘。RAID 6 与RAID 5类似。读写数据时也是将数据分布式的读写到硬盘上,和RAID 5 类似进行奇偶校验,但是比RAID 5 多保存一份校验信息。 所以冗余性能比RAID 5 强。空间利用率1-2/n 读写性能接近RAID 5 读性能稍微比RAID 5 弱一点,最多可以损坏2块硬盘。 RAID 的实现方法有两种: 软件RAID 通过系统功能或者RAID软件实现,没有独立硬件接口,需要占用一定的系统资源,受操作系统稳定性影响。 硬件RAID 通过独立的RAID硬件卡实现,稳定性比软件RAID要强,不需要占用其他硬件资源。

    01
    领券