/dev 目录中的项目到底是什么?

/dev 目录中的项目到底是什么?

我一直在用 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。主设备和从设备以及各个分区通过使用次编号进一步定义。

取自Linux 文件系统层次结构


2 个选项:

  1. 尝试

     cat < /dev/ttyS0
    

    看看是否有效。

  2. 您可以通过将用户添加到同一组(即dialout)来解决此错误。

答案2

Linux 文档项目

计算机将每个串行端口视为一个“设备”。它有时被称为终端设备,因为曾经有一段时间终端是串行端口最常见的用途。对于每个这样的串行端口,在 /dev(设备)目录中都有一个特殊文件。/dev/ttyS0) 是 DOS/Windows 世界中称为 COM1 的串行端口的特殊文件。

要将文本发送到终端,您可以将某些命令行命令的标准输出重定向到相应的特殊文件。例如,在命令提示符下键入“echo test > /dev/ttyS1”应将单词“test”发送到 ttyS1 (COM2) 上的终端(前提是您对 /dev/ttyS1 具有写入权限)。类似地,键入“cat my_file > /dev/ttyS0”会将文件 my_file 的内容发送到 COM1 (ttyS0)。

相关内容