linux清空串口内容,linux清除串口未读取的数据

使用tcflush可以清除已写但未发出,或已接收但未读数据。[喝小酒的网摘]http://blog.const.net.cn/a/17015.htm

用法如下:

linux清除串口未读取的数据 tcflush(fd, TCIFLUSH) ;

tcflush(int fd, int queue_selector)   //对已写但未发出,或已接收但未读数据的flush.

discards data written to the object referred to by fd but not

transmitted, or data received but not read, depending on the value of

queue_selector:

TCIFLUSH

flushes data received but not read.

TCOFLUSH

flushes data written but not transmitted.

TCIOFLUSH

flushes both data received but not read, and data written but not transmitted.

tcgetattr(int fd, struct termios *termios_p)   //get串口termios结构

gets the parameters associated with the object referred by fd and

stores them in the termios structure referenced by termios_p. This

function may be invoked from a background process; however, the

terminal attributes may be subsequently changed by a foreground

process.

tcsetattr(int fd, int optional_actions, const struct termios *termios_p)   //设置串口termios结构

sets the parameters associated with the terminal (unless support is

required from the underlying hardware that is not available) from the

termios structure referred to by termios_p.   optional_actions

specifies when the changes take effect:

TCSANOW

the change occurs immediately.

TCSADRAIN

the change occurs after all output written to fd has been

transmitted. This function should be used when changing parameters that

affect output.

TCSAFLUSH

the change occurs after all output written to the object referred by

fd has been transmitted, and all input that has been received but not

read will be discarded before the change is made.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Qt框架实现Linux API的串口数据读取的信号与槽示例: ```cpp #include <QMainWindow> #include <QSerialPort> #include <QByteArray> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: QSerialPort m_serialPort; QByteArray m_readDataBuffer; private slots: void onReadyRead(); }; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { m_serialPort.setPortName("/dev/ttyS0"); // 串口设备文件名 m_serialPort.setBaudRate(QSerialPort::Baud9600); // 波特率 m_serialPort.setDataBits(QSerialPort::Data8); // 数据位 m_serialPort.setParity(QSerialPort::NoParity); // 校验位 m_serialPort.setStopBits(QSerialPort::OneStop); // 停止位 connect(&m_serialPort, &QSerialPort::readyRead, this, &MainWindow::onReadyRead); } MainWindow::~MainWindow() { m_serialPort.close(); } void MainWindow::onReadyRead() { m_readDataBuffer.append(m_serialPort.readAll()); // 读取所有可读数据 if (m_readDataBuffer.contains('\n')) { // 判断是否读取到完整的一行数据 emit newDataReceived(m_readDataBuffer); // 发送信号,将读取到的数据传递给槽函数处理 m_readDataBuffer.clear(); // 清空读取缓存 } } ``` 在上述代码中,当串口接收到数据时,`QSerialPort`的`readyRead`信号会被触发,从而调用`onReadyRead`槽函数。该槽函数将读取到的数据添加到`m_readDataBuffer`缓存中,并检查是否读取到完整的一行数据(以'\n'作为行结束符)。如果读取到完整的一行数据,则通过`newDataReceived`信号将数据传递给其他槽函数处理。需要注意的是,`newDataReceived`信号需要在类定义中声明,例如: ```cpp signals: void newDataReceived(const QByteArray &data); ``` 在信号与槽的使用过程中,需要将信号与槽进行连接。在本示例中,通过以下代码将`readyRead`信号与`onReadyRead`槽函数进行连接: ```cpp connect(&m_serialPort, &QSerialPort::readyRead, this, &MainWindow::onReadyRead); ``` 这样,当`readyRead`信号被触发时,就会调用`onReadyRead`槽函数进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值