Linux环境下用fsockopen连接/dev/ttyUSB0如何获取对应端口号?
核心认知纠正
首先你存在一个理解误区:fsockopen() 是用于创建TCP/UDP网络套接字连接的函数,只能对接监听在网络端口上的服务,而 /dev/ttyUSB0 是Linux下的USB转串口设备文件,属于字符设备,本身不绑定任何TCP/UDP端口,不存在你要找的“物理端口地址编号”参数可以传给fsockopen()。
PHP操作串口设备的正确方案
你需要使用PHP的串口相关能力,而非网络套接字函数实现交互:
- 方案1:安装
dio扩展(Direct IO扩展),直接操作串口设备文件,示例代码逻辑:
// 打开串口设备,设置读写权限+非阻塞模式 $serial = dio_open('/dev/ttyUSB0', O_RDWR | O_NOCTTY | O_NONBLOCK); // 配置串口参数(波特率、数据位、停止位、校验位等,要和设备要求匹配) dio_tcsetattr($serial, [ 'baud' => 9600, 'bits' => 8, 'stop' => 1, 'parity' => 0 ]); // 读写数据 dio_write($serial, "发送给设备的指令"); $response = dio_read($serial, 1024); // 关闭设备 dio_close($serial);
- 方案2:如果无法安装扩展,也可以用文件操作函数直接读写设备文件(需要确保PHP运行用户有
/dev/ttyUSB0的读写权限),注意提前用stty命令配置好串口参数。
若需查询/dev/ttyUSB0的硬件端口信息(非网络端口)
如果需要获取该串口设备的硬件属性、挂载信息,可以用以下Linux命令查询:
- 查看USB设备详细列表,匹配ttyUSB0对应的设备:
lsusb - 查看ttyUSB设备的详细映射信息:
udevadm info --query=all --name=/dev/ttyUSB0 - 查看系统挂载的所有串口设备记录:
dmesg | grep ttyUSB
内容的提问来源于stack exchange,提问作者Monfonya
相关产品推荐
相关产品推荐

