Shell 程序只打开一个字符驱动程序并等待

Shell 程序只打开一个字符驱动程序并等待

激发这个问题的原因是我正在测试看门狗设备的功能,我在想是否有一个 shell 内置命令来打开设备而不执行任何操作/等到终止? Echo/touch似乎只是在执行操作后立即打开和关闭设备。Cat似乎不起作用。

我正在使用 C 应用程序执行相同的操作,但想知道 shell 脚本是否对此有一些规定

答案1

在伯恩式的外壳中,

exec 3< "$device"

打开 shell 的文件描述符 3 上的设备。

这或多或少相当于 C 的:

fd = open(device, O_RDONLY);
if (fd < 0) handler_error(...);
if (fd != 3) { dup2(fd, 3); close(fd); }

(也在那个 fd 上ksh93做了一个)。fcntl(3, F_SETFD, FD_CLOEXEC)

关闭它:exec 3<&-

zsh,ksh93和 中bash, 的等价物fd = open(device, O_RDONLY)也可以写为:

exec {fd}< "$device"

其中文件描述符将是 9 以上的第一个空闲描述符并存储在$fd.

关闭它:exec {fd}<&-

替换<>for O_WRONLY|O_CREAT|O_TRUNC<>forO_RDWR|O_CREAT>>for O_WRONLY|O_CREAT|O_APPEND

zsh还有一个sysopen内置(在zsh/system模块中)您可以在其中准确指定标志。

请注意,在 POSIX 兼容的 shell 中,exec作为特别内置,如果文件无法打开,则在非交互时这是一个致命错误(退出脚本)。您可以使用该command命令禁用它。

if command exec 3< "$device"; then
  do-what-you-need-to-do
else
  handle-the-error-yourself
fi

答案2

while sleep 3600; do :; done >/dev/your_watchdog

我(从工作和失败中)收集到echotouch设备cat应该以只写模式打开。

相关内容