C++ linux中串口的恢复

C++ linux中串口的恢复,c++,ubuntu,serial-port,C++,Ubuntu,Serial Port,我试图通过一个串行端口与一个PLC进行通信,PLC控制一个机械闸门,以完成工业中的一项任务。由于我对这个话题不是很有经验,而且我很匆忙,所以我没有意识到存储旧设置并在程序退出时恢复它们的重要性。更改termios结构中的某些字段后,即使使用了与另一个端口(ttyD0)完全相同的端口打开功能,我也无法再从端口读取任何内容,这对于这些设置来说很好。有什么建议可以让ttyD1恢复到工作状态吗 用于打开端口的代码如下所示: int OpenPort() { fd = open("/dev/tty

我试图通过一个串行端口与一个PLC进行通信,PLC控制一个机械闸门,以完成工业中的一项任务。由于我对这个话题不是很有经验,而且我很匆忙,所以我没有意识到存储旧设置并在程序退出时恢复它们的重要性。更改termios结构中的某些字段后,即使使用了与另一个端口(ttyD0)完全相同的端口打开功能,我也无法再从端口读取任何内容,这对于这些设置来说很好。有什么建议可以让ttyD1恢复到工作状态吗

用于打开端口的代码如下所示:

int OpenPort()
{
    fd = open("/dev/ttyD0", O_RDWR | O_NOCTTY);

    if (fd < 0)
    {
        cerr << "open error " << errno << strerror(errno) << endl;
    }
    else
    {
        struct termios my_termios;
        fcntl(fd, F_SETFL, 0);
        tcgetattr(fd, &my_termios);
        //bzero(&my_termios, sizeof(my_termios));
        tcflush(fd, TCIFLUSH);      
        my_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL | HUPCL;
        //my_termios.c_lflag = ICANON;
        //cfsetospeed(&my_termios, B115200);
        tcsetattr(fd, TCSANOW, &my_termios); 
    }
    return fd;
}
intopenport()
{
fd=打开(“/dev/ttyD0”,O|RDWR | O|NOCTTY);
如果(fd<0)
{

cerr只需复制从第一个
tcgetattr
收到的结构,并在退出时将其交给
tcsetattr

您可以使用
stty
manstty
)来获取/设置终端行设置。这样,您可以找到要做的事情,然后可以使用
strace
查看如何做并添加到您的代码中。