【发布时间】:2018-03-28 21:16:26
【问题描述】:
我想通过伪终端测试使用 Qt 串行端口的应用程序。根据我实现的手册页:
// open master
QSerialPort master("/dev/ptmx");
master.open(QSerialPort::ReadWrite);
int master_fd = master.handle();
// get device name of slave pseudoterminal
constexpr size_t PTSNAME_BUFFER_LENGTH = 128;
char ptsname_buffer[PTSNAME_BUFFER_LENGTH];
if (ptsname_r(master_fd, ptsname_buffer, PTSNAME_BUFFER_LENGTH) != 0)
return 0;
// grant access to the slave
if (grantpt(master_fd) != 0)
return 0;
// unlock the slave
if (unlockpt(master_fd) != 0)
return 0;
// open slave
std::cout << "Slave pseudoterminal: " << ptsname_buffer << std::endl;
QSerialPort slave(ptsname_buffer);
slave.open(QSerialPort::ReadWrite);
// test communication
master.write("Hello World");
std::this_thread::sleep_for(std::chrono::milliseconds(500));
std::cout << "Received: " << slave.readAll().toStdString() << std::endl;
创建从属设备似乎可行(在我的例子中,它是在/dev/pts/2 创建的)。但是,slave.readAll() 命令总是返回一个空字符串。
是否可以使用伪终端测试 QSerialPort?
【问题讨论】:
-
还是用 tty0tty 比较好。而且,是的,您需要在 qt-event 循环中,或者,至少要使用 waitForXX() 方法。
标签: c++ linux qt serial-port virtual-serial-port