ci sono ripercussioni ad avere molti processi scrivono ad un unico lettore in un named pipe in POSIX?

StackOverflow https://stackoverflow.com/questions/587727

  •  06-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un programma per la POSIX (OSX) dove avrò molti processi che inviano messaggi a un ascoltatore, che è essenzialmente un filo di registrazione. Tutti i processi sono in esecuzione in programmi separati, e utilizzando un unico named pipe (FIFO) che molti processi scrivono, ma solo un unico processo legge da è molto allettante.

Domande:

1) Sarà questo lavoro? - posso fare questo lavoro utilizzando bash per impostare una FIFO con più processi di scrittura ad esso, quindi so in teoria funziona. Ma in pratica, ci sono questioni che sto passando sopra?

shell # 1

$ mkfifo /tmp/fifo
$ cat /tmp/fifo

conchiglie # 2 e # 3

$ cat > /tmp/fifo
"Type stuff here, after hitting enter, it is read by shell #1"

2) Se ciascuno scrittore scrive solo i messaggi relativamente brevi (<100 byte?) Quindi posso supporre che ogni chiamata a scrivere () verrà verrà inviato al lettore nella sua interezza? O sarà la metà di un messaggio essere a rischio di incomprensibile con la metà di un altro messaggio da un autore diverso?

Grazie per qualsiasi consiglio.

È stato utile?

Soluzione

La scrittura FIFO dovrebbe essere atomica, finchè è sotto la dimensione della pagina. Quindi non ci dovrebbe essere un problema con 100 byte. Su Linux la dimensione massima utilizzata per essere 4K, credo che sia più grande ora. Ho usato questa tecnica su alcuni sistemi per il messaggio che passa, dal momento che le scritture finiscono atomica.

Si può finire con un problema, se si utilizza una serie di operazioni di scrittura, dal momento che il buffering potrebbe causare un problema di sincronizzazione. Quindi assicuratevi l'intero messaggio è scritto in una sola volta. per esempio. costruire una stringa, quindi stampare, non stampare più pezzi in una sola volta.

s="This is a message"
echo $s

NON

echo "This "
echo "is "
echo " a message"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top