L'obiettivo è quello di "bloccare" l'accesso a un dispositivo seriale o altro dispositivo Linux, per garantire l'accesso esclusivo al dispositivo mentre è in uso. Ciò impedisce, ad esempio, due programmi che aprono entrambi lo stesso dispositivo seriale e "competono" per leggere byte dal dispositivo.Qual è la procedura migliore per bloccare porte seriali e altri dispositivi in Linux?
Il consiglio è stato quello di utilizzare i file di blocco dispositivo UUCP in stile SYSV come /var/lock/LCK..ttyS1
. Questo è ciò che è raccomandato da Linux Serial HOTWO: Locking Out Others. È anche documentato nello Filesystem Heirarchy Standard. È implementato da programmi terminali seriali come gtkterm, picocom. Esistono librerie come liblockdev
e liblockfile
per supportarlo (sebbene i dettagli di implementazione differiscano tra queste due librerie).
Tuttavia, ho trovato Debian bug #734086, che dice su Linux, i blocchi di dispositivo UUCP in stile SYSV sono deprecati e dovrebbero essere usati i blocchi di avviso flock()
.
Tuttavia, non riesco a trovare un'origine di documento affidabile per descrivere la deprecazione di questi blocchi di dispositivi UUCP in stile SYSV e la raccomandazione di flock()
, oltre a quella di bug di Debian.
Ho anche trovato ioctl(fd, TIOCEXCL)
che viene utilizzato dall'utilità screen
per bloccare un terminale.
Qual è la "best practice" moderna per bloccare porte seriali e altri dispositivi in Linux? Dove possiamo trovare la documentazione aggiornata che descrive questo?
Vedo che questo ha attirato un voto ravvicinato a causa dell'essere "principalmente basato sull'opinione pubblica". Tuttavia, affinché il blocco della porta seriale funzioni utilizzando qualcosa come i file di blocco UUCP o 'flock()' (entrambi sono "advisory"), è importante che tutti i programmi utilizzino lo stesso metodo, altrimenti il blocco non funzionerà. Per esempio. se un programma utilizza i blocchi di file UUCP e un altro utilizza 'flock()', allora il blocco è inefficace ed entrambi possono aprire la porta. Quindi questa è una domanda pragmaticamente importante per ottenere consenso nella comunità Linux. –