首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux参数解释

Linux参数解释
EN

Stack Overflow用户
提问于 2014-04-09 14:29:31
回答 2查看 883关注 0票数 1

我一直试图用Linux (Debian )操作系统在Olimex A13计算机上设置一个串口。为了设置参数来设置UART,我使用了termios结构。在我的例子中,我只是简单地设置了如下所示的parameter = value ..。

代码语言:javascript
运行
复制
options.c_cflag = (CLOCAL | CREAD);

我还在互联网上看到了如下示例代码.

代码语言:javascript
运行
复制
tcgetattr(fd, &options);

cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~( ICANON | ECHO | ECHOE |ISIG );
options.c_iflag &= ~(IXON | IXOFF | IXANY );
options.c_oflag &= ~OPOST;

tcsetattr(fd, TCSANOW, &options);

在上述情况下,参数赋值似乎使用按位运算符来设置参数。

我的问题是,上面的作业是如何解释的?

例如:.

代码语言:javascript
运行
复制
options.c_cflag |= (CLOCAL | CREAD);

与..。

代码语言:javascript
运行
复制
options.c_cflag = (CLOCAL | CREAD);   

???

同样的原因是:.

代码语言:javascript
运行
复制
options.c_cflag &= ~PARENB;  

与..。

代码语言:javascript
运行
复制
options.c_cflag = ~PARENB;   

???

termios标志实际上是一组位,其中参数对应于标志中的特定位位置吗?

由于这些值是由参数(即CLOCAL、CREAD)设置的,所以在将flag =设置为参数时,是否存在位明智操作符?

如果有人能澄清这一点,我将非常感激。

EN

回答 2

Stack Overflow用户

发布于 2014-04-09 14:57:12

termios位确实是设置在unsigned intstruct termios上的位(至少在Linux上是这样)。它们是在/usr/include/<platform>/bits/termios.h中定义的。

怎么样..。options.c_cflag |= (CLOCAL \ CREAD);...interpretedoptions.c_cflag = (CLOCAL _ CREAD);

|= (CLOCAL | CREAD)将将请求的termios位设置为已经存在的位,而= (CLOCAL | CREAD)只将请求的位设置为零(这很可能是错误的,因为它将字符大小设置为5位(CS5) )。

c_cflag &= ~PARENB;options.c_cflag = ~PARENB的对抗也是如此。前者只将PARENB标志设置为零,而后者则将所有位设置为1,但PARENB标志将被设置为零--我认为这不是期望的结果。

票数 3
EN

Stack Overflow用户

发布于 2020-01-16 10:51:15

options.c_cflag = ~PARENB;

options.c_cflag |= ~PARENB;//这将是唯一的真理

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22965725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档