newattr.c_lflag &= ~(ICANON|ECHO);
这里是 c_lflag
的新值已经设置好了。但我不明白这是什么意思&= ~
|
是什么?表示介于 ICANON
之间和ECHO
?
最佳答案
在 macOS 上,ICANON
和 ECHO
的值在 /usr/include/sys/termios.h
中定义为:
#define ECHO 0x00000008 /* enable echoing */
#define ICANON 0x00000100 /* canonicalize input lines */
您的计算机上的值可能有所不同;细节并不重要,但关键是每个都是具有单个位集的数字。
|
运算符形成两个数字的按位“或”:0x000000108
。
~
运算符形成两个数字的按位补码:0xFFFFFEF7
。
&=
获取 newattr.c_lflag
中已有的值,并与值 0xFFFFFEF7
形成按位“与”。最终结果是保留变量中已设置的所有位(ECHO
和 ICANON
位除外,这两个位均设置为 0
。
符号value & ~(bit1 | bit2 …)
是一个标准的C习惯用法,用于清除可能或可能未设置在整数中的位。对应的设置代码为value | (bit1 | bit2 …)
,其中括号是可选的,因为运算符始终相同。您可以使用按位“异或”或 ^
来翻转位 - 将 1
更改为 0
,反之亦然。
关于c - 带有按位运算符的 Termios 语法配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48477989/