Serial port 为什么在Termios串行接口中保留现有设置

Serial port 为什么在Termios串行接口中保留现有设置,serial-port,termios,Serial Port,Termios,我正在使用一些开源软件,我想将我的一些错误修复返回到原始项目。该软件包括一个使用termios.h访问的串行接口。运行Ubuntu的PC和外围设备都使用相同的配置。我只需要发送和接收字节的非常基本的设置:没有奇偶校验,没有流控制或XON/XOFF,没有规范模式。 原始代码只更改了一个标志:uart\u config.c\u of lag&=~ONLCR 这没有充分配置PC端的端口,我最终替换了所有标志值: uart_config.c_iflag=IGNBRK | INPCK; uart_conf

我正在使用一些开源软件,我想将我的一些错误修复返回到原始项目。该软件包括一个使用termios.h访问的串行接口。运行Ubuntu的PC和外围设备都使用相同的配置。我只需要发送和接收字节的非常基本的设置:没有奇偶校验,没有流控制或XON/XOFF,没有规范模式。 原始代码只更改了一个标志:
uart\u config.c\u of lag&=~ONLCR
这没有充分配置PC端的端口,我最终替换了所有标志值:

uart_config.c_iflag=IGNBRK | INPCK;
uart_config.c_of lag=NL0 | VT0;
uart|u config.c|u cflag=CS8 | CREAD | CLOCAL;
uart_config.c_lflag=0

哪个好用。 然而,几乎每个在线代码示例都显示了使用&=~或|= 乙二醇


在设置中保留某些标志、值或未使用位的值的原因是什么?我想不出能得到多少,除非有人不能理解所有标志的用途,并且害怕更改它们,如果原始设置没有预先配置为合理的值,则会有很大的风险

这是为可靠和可移植的代码。看见“然而,几乎每一个在线代码示例都显示只设置特定的位,而保留所有其他位不变……”——那么您已经找到了好的(&IMO)示例,应该模仿它们@锯末,谢谢你的回复。“您已经找到了好的(&IMO稀缺)示例,应该模仿它们!”-我会记住这一点。我应该注意,我只是在更改termios中定义的标志变量的值,而不是其他任何东西,但在发布这个问题后,我确实想到了一些罕见的、倾向于怪异的,更改整个c_iflag/c_oflag/c_cflag/c_lflag可能导致问题的情况。一种情况是,处理器仅通过32位读写访问ram,termios值直接映射到寄存器,其他寄存器位于同一组4字节宽的寄存器上。另一种情况是,termios的一个奇怪的实现将未使用的位用于我应该不讨论的内容。