c - 带有按位运算符的 Termios 语法配置

标签 c bit-manipulation

newattr.c_lflag &= ~(ICANON|ECHO);

这里是 c_lflag 的新值已经设置好了。但我不明白这是什么意思&= ~ | 是什么?表示介于 ICANON 之间和ECHO

最佳答案

在 macOS 上,ICANONECHO 的值在 /usr/include/sys/termios.h 中定义为:

#define ECHO    0x00000008  /* enable echoing */
#define ICANON  0x00000100  /* canonicalize input lines */

您的计算机上的值可能有所不同;细节并不重要,但关键是每个都是具有单个位集的数字。

| 运算符形成两个数字的按位“或”:0x000000108

~ 运算符形成两个数字的按位补码:0xFFFFFEF7

&= 获取 newattr.c_lflag 中已有的值,并与值 0xFFFFFEF7 形成按位“与”。最终结果是保留变量中已设置的所有位(ECHOICANON 位除外,这两个位均设置为 0

符号value & ~(bit1 | bit2 …)是一个标准的C习惯用法,用于清除可能或可能未设置在整数中的位。对应的设置代码为value | (bit1 | bit2 …),其中括号是可选的,因为运算符始终相同。您可以使用按位“异或”或 ^ 来翻转位 - 将 1 更改为 0,反之亦然。

关于c - 带有按位运算符的 Termios 语法配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477989/

相关文章:

bit-manipulation - Verilog 访问特定位

c++ - 如何位移 u16* 的数据?

x86 - Bit Hack 获取位变化的位置

C "gets"命令输入只是跳到结束而不是等待我的输入

c - 在 C 中寻找正确的环形缓冲区实现

c - 结构类型数组。在结构内部有指针

java - 返回 n(int, string,...) 的第 x 位

c - 寻找涉及逻辑运算的答案的清晰度

c - 从字符串加载 C 结构

c - fread into struct 读取数据不正确