Semplice script qui:BASH: Migliore architettura per leggere da due ingressi flussi
a) costantemente leggere da un socket e memorizzare i valori in un array associativo
b) segue costantemente valori da stdin e rispondere t/f se esistono già nell'array associativo
a & b sono eventi casuali, non associati in alcun modo.
Il trucco è l'accesso alla matrice da entrambi i sottoprocessi (dal mettere un processo in background genera come un sottoprocesso)
sto pensando attraverso la strategia migliore, e si verificano un paio di idee, ma mi chiedo se qualcuno ha niente di meglio in mente:
1) reindirizzare l'input da presa a stdin come sottoprocesso e trattare entrambi gli ingressi in un ciclo while (dimensioni dei dati sono piccole, < 30 caratteri, quindi credo rimarranno atomico ?).
2) leggere il socket, quindi STDIN con piccoli valori di timeout (0.1?) Su read in modo da simulare l'I/O non bloccante.
3) UPDATE: scrivere i dati del socket in un file (in realtà l'altro processo lo scrive direttamente in un file), quindi ogni volta che arriva una richiesta per verificare se il valore esiste, elaborare le voci nel file, aggiungendoli all'array (usa il blocco dei file).
Sembra che tu abbia l'idea giusta. C'è una ragione per farlo in bash rispetto ad un'altra lingua? – Slartibartfast
Buona domanda. No, nessuna buona ragione per usare bash su un'altra lingua. Bash è semplice e piccolo, questa è l'unica ragione (e ho altri 5 altri script di bash che eseguono simili attività di autenticazione/registrazione/gestione degli utenti, quindi è bello mantenere una piattaforma uniforme) –