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

mat*_*975 9 hardware kernel application-development drivers

我一直在用 C++ 编写一个应用程序,它通过写入连接到串行端口的调制解调器来传输无线电消息。为此,我需要使用以下形式的代码获取文件描述符

fd1=open(“/dev/ttyS0?, O_RDWR | O_NOCTTY | O_NDELAY);
Run Code Online (Sandbox Code Playgroud)

这让我对 /dev 中项目的性质感到好奇。为了尝试了解这些项目的内容,我尝试了

sudo cat /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

只为得到消息

cat: /dev/ttyS0: Input/output error
Run Code Online (Sandbox Code Playgroud)

这根本没有帮助我的理解。这些项目实际上是一个文件还是只是一种允许访问驱动程序功能的链接?

Rin*_*ind 9

Linux 中的一切都是文件或目录。里面的东西/dev是特殊文件。

大多数设备要么是块设备,要么是字符设备;然而,其他类型的设备存在并且可以创建。一般来说,“块设备”是存储或保存数据的设备,“字符设备”可以被认为是传输或传输数据的设备。例如,软盘驱动器、硬盘驱动器和 CD-ROM 驱动器都是块设备,而串行端口、鼠标和并行打印机端口都是字符设备。有各种各样的命名方案,但在绝大多数情况下,这些都是完全不合逻辑的。

设备按类型定义,例如“块”或“字符”,以及“主要”和“次要”编号。主编号用于对设备进行分类,次编号用于标识特定的设备类型。例如,所有连接到主控制器的 IDE 设备的主设备号为 3。主设备和从设备以及各个分区通过使用次设备号进一步定义。

取自Linux-Filesystem-Hierarchy


2个选项:

  1. 尝试

     cat < /dev/ttyS0
    
    Run Code Online (Sandbox Code Playgroud)

    看看这是否有效。

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