Perl Win32::SerialPort:read和input方法的区别

4

我一直在尝试在perl 5.10中使用模块Win32::SerialPort(也许它在5.14版本上有一些问题)。我需要向串口发送命令并获取它们的输出。我已经发现使用写(write)函数可以实现前半部分。对于后半部分的输出,我已经看到了以下实现:

$port_obj->write("ATE");  #assuming we give the AT command Echo
$res = $port_obj->input;

如果这个命令的输出可以被捕获,为什么我们不能更直观地使用以下方式(即使$res然后返回已写入的位数)并使用$res来捕获写入的输出。
$res = $port_obj->write("ATE");

此外,我还看到一些$port_obj->read()的实现,但我不确定read和input方法之间有什么区别。请帮忙解答。
1个回答

0

1.) 直接从写入返回接收到的数据在所有(大多数?)情况下都不起作用,因为连接的设备可能会出现问题。如果它没有回复,或者没有立即回复怎么办?有无数的串行设备存在,你永远不知道会得到什么回应。

2.) $PortObj->read 是一个阻塞调用,即它会等待直到请求的字节数被接收。 $PortObj->input 是非阻塞的,即它立即返回,告诉您接收到了多少字节(如果有的话)。文档在这一点上有点模糊。

干杯。


我发现输入实际上是在后台读取的,如果在调用它之前提供足够的休眠时间,它可以很好地工作。 - CuriousSid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接