【问题标题】:can't echo to or cat from a device file that was created by mknod无法从 mknod 创建的设备文件中回显或 cat
【发布时间】:2019-05-24 20:27:16
【问题描述】:

我在/dev/ 文件夹中创建了一个字符设备文件,如下所示:

mode_t mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_IFCHR;

const char * pathname = "/dev/tty.myown;"

int res = mknod(pathname, mode, 0);

成功创建了字符设备文件。所以我通过调用cat /dev/tty.myown 调用了cat,然后尝试通过运行:echo "hello world" > /dev/tty.own 向它发送消息。但是,该消息未显示在cat 流中。我想知道我需要在该文件上设置哪些其他设置才能从该设备文件中读取

【问题讨论】:

  • 您为什么希望从终端设备读取内容以返回写入内容?当您写入终端设备时,它会将其打印在屏幕上。当您从设备读取时,它会返回用户在键盘上键入的内容。

标签: c++ c device-driver


【解决方案1】:

POSIX 标准 (.1-2001) 规定:

mknod() 的唯一可移植用途是创建一个 FIFO 专用文件。如果 mode 不是 S_IFIFO 或 dev 不是 0,则 mknod() 的行为是未指定的

您正在尝试创建一个字符特殊文件(即不是 S_IFIFO)。特别是在 Linux 上,设备号 0 是a null device,它应该什么都不做。如果您想要 FIFO,请设置 S_IFIFO 而不是 S_IFCHR

【讨论】:

  • 啊谢谢你的信息。你知道这些数字在 Mac OS X 上是否表示相同的意思吗?
  • @mjl007 我相信你应该仍然在 Mac OS X 上使用 S_IFIFO,0,我当与 @ 一起使用时,0 仍然意味着 null/no-op 设备987654324@,但我不确定后者。
猜你喜欢
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多