GNU/Linux >> Znalost Linux >  >> Linux

Program Shell stačí otevřít ovladač znaků a čekat?

Co inspirovalo tuto otázku je, že testuji funkčnost zařízení hlídacího psa a přemýšlel jsem, zda existuje příkaz vestavěný do shellu, který by zařízení prostě otevřel a nedělal nic/nečekal, dokud nebude ukončen?
Echo/touch Zdá se, že pouze otevírá a zavírá zařízení ihned po provedení operace. Kočka zdá se, že nefunguje.

Používám aplikaci v jazyce C, abych udělal totéž, ale zajímalo by mě, jestli to má skript shellu

Přijatá odpověď:

Ve skořápkách podobných Bourne

exec 3< "$device"

Otevře zařízení na deskriptoru souboru 3 shellu.

To by bylo víceméně ekvivalentní C:

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

(ksh93 také provede fcntl(3, F_SETFD, FD_CLOEXEC) na tom fd).

Chcete-li jej zavřít:exec 3<&-

V zsh , ksh93 a bash , ekvivalent fd =open(device, O_RDONLY) lze také napsat jako:

exec {fd}< "$device"

Kde deskriptor souboru by byl první volný nad 9 a uložený v $fd .

Chcete-li jej zavřít:exec {fd}<&-

Nahraďte < pomocí > pro O_WRONLY|O_CREAT|O_TRUNC a pomocí <> pro O_RDWR|O_CREAT a >> pro O_WRONLY|O_CREAT|O_APPEND .

zsh má také sysopen vestavěný (v zsh/system module), kde můžete přesně specifikovat příznaky.

Všimněte si, že v shellech vyhovujících POSIX, exec je speciální vestavěná , pokud soubor nelze otevřít, jedná se o kritickou chybu, když není interaktivní (ukončí skript). Můžete to zakázat pomocí příkazu příkaz.

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

Linux
  1. Jak nainstalovat ovladač zařízení v systému Linux

  2. Linux – Sysfs a Devtmpfs?

  3. Linux – Jak linuxové jádro zná hlavní a vedlejší čísla zařízení?

  1. Co jsou speciální znaky a speciální soubory bloků v systému Unix?

  2. Linux – N Open Source software pro simulaci a virtuální programování biosu počítače?

  3. Je možný smíšený skript Shell a python?

  1. Jaký je rozdíl mezi ovladačem platformy Linux a normálním ovladačem zařízení?

  2. Ovladač zařízení IOCTL Linux

  3. rozdíl mezi souborem zařízení a ovladačem zařízení