我正在尝试使用C / C ++在linux中使用硬件握手来编程串行通信。实现握手的信号是CTS(清除发送)和RTS(请求发送)。目前我设置CTS信号的功能如下:
int setCTS(int fd, int value) {
int status;
ioctl(fd, TIOCMGET, &status); // get the current port status
if (value)
status |= TIOCM_CTS; // rise the CTS bit
else
status &= ~TIOCM_CTS; // drop the CTS bit
ioctl(fd, TIOCMSET, $status); // set the modified status
return 0;
}
其中 fd 是端口的文件描述符,值是要为信号设置的值。为了对此功能进行编码,我基于http://www.easysw.com/~mike/serial/serial.html#5_1。
问题是 gcc 无法识别示例中使用的任何常量。有什么建议吗?
- 更新 -
我找到了答案。再看另一个例子,sys/ioctl.h
声明了常量。
答案 0 :(得分:3)
这可能不适用于您的特定应用,但我想我会在此发布,以防它或其他人搜索。
在大多数使用termios
的系统上,您可以在CRTSCTS
结构的->c_cflags
成员中设置termios
标记,并传递给tcsetattr
,让内核或硬件为您执行RTS / CTS流控制。
(它不是POSIX,但它适用于BSD和SystemV派生系统,所以它几乎无处不在 - 包括Linux)。