Linux pty虚拟串口write阻塞

这两天遇到一个问题,程序中的串口运行时间长了就读不到数据了,最后发现是因为我虚拟的串口在写数据的时候发生了阻塞从而导致读串口的线程一直阻塞在写虚拟串口的操作处。我列出我程序的片段:

void vir_serial_init(char *filename){
	vir_serial_fd = -1;
    sfd = -1;
    int ret = -1;
    char spty_name[100];

    memset(spty_name, '\0', 100);
    ret = openpty(&vir_serial_fd, &sfd, spty_name, NULL, NULL);
    if (ret == -1) {
        printf("SerialPort::SerialPort:openpty returned error");
    } else {
        /*如果链接文件存在则将其删除*/
        if ((access(filename, F_OK)) != -1) {
            remove(filename);
        }
        symlinkat(spty_name, sfd, filename);
    }
}
void serial_read_thread(void *ptr){
	struct timeval timeout;
    timeout.tv_sec = 0;
    timeout.tv_usec = 1000;
    char buff[100];
	while(true){
		int rs = select(fd_max+1, &fd_sets, NULL, NULL, &timeout);
    	if(rs > 0){
           	if(FD_ISSET(fd1, &fd_sets)){
               read_serial1();
           	}
           	if(FD_ISSET(fd2, &fd_sets)){
               read_serial2();
               sprintf(buff, "hello world");
               //问题就发生在此处,当虚拟串口数据没有被读走时持续的写就会发生阻塞
               write(vir_serial_fd, buff, strlen(buff));
           	}
    	}
	}
}

上面展示了我一个线程读多个串口的方式下,写虚拟串口导致阻塞的程序实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南波儿万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值