📅  最后修改于: 2023-12-03 15:28:17.764000             🧑  作者: Mango
在计算机中,输入输出端口(Input/Output Port)是用于外部设备与计算机进行通信的接口。这些端口与计算机的处理器相连,可以在计算机和外部设备之间传输数据。
计算机的硬件端口是指物理接口,通常在计算机主板上,用于与外部设备进行通信。硬件端口通常包括以下几种类型:
在计算机中,软件端口是指通过软件提供的 API (Application Programming Interface,应用程序编程接口)接口访问外部设备的接口。软件端口通常分为以下两类:
文件型端口会将一个设备模拟为一个文件,程序员可以像读取、写入文件一样读取、写入数据到这个“文件”。例如在 Unix 系统下,一个串口设备可以被模拟为一个文件,程序员可以通过打开 Serial Port 设备对应的文件,使用 read 和 write 系统调用读取或写入数据。
底层端口则是直接操作硬件端口。底层端口的应用场景较为特殊,例如在需要直接操作某个设备驱动程序的情况下。
import serial
# 打开串口
ser = serial.Serial('/dev/ttyUSB0', 9600)
# 发送数据
ser.write(b'hello!')
# 接收数据
resp = ser.read(10)
print(resp)
这里以 Python 的 PySerial 库为例,通过打开串口设备对应的文件,就可以像读写文件一样读写串口设备。
#include <Windows.h>
#include <iostream>
int main()
{
// 打开端口
HANDLE hCom = ::CreateFile(TEXT("COM1"), GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom == INVALID_HANDLE_VALUE) {
std::cout << "Failed to open serial port!" << std::endl;
return -1;
}
// 配置端口参数,波特率=9600
DCB dcb{};
::GetCommState(hCom, &dcb);
dcb.BaudRate = 9600;
::SetCommState(hCom, &dcb);
// 发送数据
char data[] = "Hello!";
DWORD bytesWritten = 0;
::WriteFile(hCom, data, strlen(data), &bytesWritten, NULL);
// 接收数据
char buf[100];
DWORD bytesRead = 0;
::ReadFile(hCom, buf, sizeof(buf), &bytesRead, NULL);
std::cout << buf;
// 关闭端口
::CloseHandle(hCom);
return 0;
}
这里以 Windows 操作系统为例,利用 Windows API 直接操作端口,读写数据。