GNU/Linux >> Linux Esercitazione >  >> Linux

Programma Shell per aprire un driver di caratteri e aspettare?

Ciò che ha ispirato questa domanda è che sto testando la funzionalità del dispositivo watchdog e stavo pensando se esiste un comando integrato nella shell per aprire il dispositivo e non fare nulla/attendere fino al termine?
Echo/touch sembrano aprire e chiudere il dispositivo subito dopo aver eseguito l'operazione. Cat non sembra funzionare.

Sto usando un'applicazione C per fare lo stesso, ma mi chiedevo se lo script di shell avesse delle disposizioni per questo

Risposta accettata:

In conchiglie tipo Bourne,

exec 3< "$device"

Apre il dispositivo nel descrittore di file 3 della shell.

Sarebbe più o meno equivalente a C:

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

(ksh93 fa anche un fcntl(3, F_SETFD, FD_CLOEXEC) su quel fd).

Per chiuderlo:exec 3<&-

In zsh , ksh93 e bash , l'equivalente di fd = open(device, O_RDONLY) potrebbe anche essere scritto come:

exec {fd}< "$device"

Dove il descrittore di file sarebbe il primo libero sopra 9 e memorizzato in $fd .

Per chiuderlo:exec {fd}<&-

Sostituisci < con > per O_WRONLY|O_CREAT|O_TRUNC e con <> per O_RDWR|O_CREAT e >> per O_WRONLY|O_CREAT|O_APPEND .

zsh ha anche un sysopen built-in (in zsh/system modulo) dove puoi specificare esattamente i flag.

Nota che nelle shell compatibili con POSIX, exec essendo un incorporato speciale , se il file non può essere aperto, è un errore irreversibile quando non è interattivo (esce dallo script). Puoi disabilitarlo usando il command comando.

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

Linux
  1. Come programmare con Bash:sintassi e strumenti

  2. Ssh:come rifiutare un processo in esecuzione e associarlo a una nuova shell dello schermo?

  3. Differenza tra shell di accesso e shell non di accesso?

  4. Linux – Perché usiamo Su – e non solo Su?

  5. Linux:in che modo il kernel Linux conosce i numeri maggiori e minori del dispositivo?

Come installare un driver di dispositivo su Linux

Come installare e utilizzare Nu Shell su Linux

Linux – Sysfs e Devtmpfs?

Come scrivere ed eseguire un programma C in Linux

Determina se percorso relativo o assoluto nel programma shell

differenza tra file di dispositivo e driver di dispositivo