我一直在用 C++ 编写一个应用程序,通过写入连接到串行端口的调制解调器来传输无线电消息。为此,我需要使用以下形式的代码获取文件描述符
fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);
这让我对 /dev 中项目的性质感到好奇。为了了解这些项目的内容,我尝试了
sudo cat /dev/ttyS0
只收到消息
cat: /dev/ttyS0: Input/output error
这根本没帮助我理解。这些项目实际上是文件还是只是一种允许访问驱动程序功能的链接?
答案1
Linux 中的一切都是文件或目录。 中的事物/dev
是特殊文件。
大多数设备都是块设备或字符设备;但是,也存在其他类型的设备,并且可以创建。一般来说,“块设备”是存储或保存数据的设备,“字符设备”可以被认为是传输或转移数据的设备。例如,软盘驱动器、硬盘驱动器和 CD-ROM 驱动器都是块设备,而串行端口、鼠标和并行打印机端口都是字符设备。有某种命名方案,但在绝大多数情况下,这些方案完全不合逻辑。
设备按类型定义,例如“块”或“字符”,以及“主”和“次”编号。主编号用于对设备进行分类,次编号用于标识特定的设备类型。例如,连接到主控制器的所有 IDE 设备的主编号都是 3。主设备和从设备以及各个分区通过使用次编号进一步定义。
2 个选项:
尝试
cat < /dev/ttyS0
看看是否有效。
您可以通过将用户添加到同一组(即
dialout
)来解决此错误。
答案2
计算机将每个串行端口视为一个“设备”。它有时被称为终端设备,因为曾经有一段时间终端是串行端口最常见的用途。对于每个这样的串行端口,在 /dev(设备)目录中都有一个特殊文件。/dev/ttyS0) 是 DOS/Windows 世界中称为 COM1 的串行端口的特殊文件。
要将文本发送到终端,您可以将某些命令行命令的标准输出重定向到相应的特殊文件。例如,在命令提示符下键入“echo test > /dev/ttyS1”应将单词“test”发送到 ttyS1 (COM2) 上的终端(前提是您对 /dev/ttyS1 具有写入权限)。类似地,键入“cat my_file > /dev/ttyS0”会将文件 my_file 的内容发送到 COM1 (ttyS0)。