Eu crio o FIFO para se comunicar entre processos não relacionados. No meu projeto não há como quebrar loop infinito em que o programa é executado. Então, eu não posso unlink
do FIFO.
Eu pensei que eu poderia remover e recriar com o mesmo nome se o FIFO existisse de antemão no processo do gravador. Mas e se o processo do leitor abrir o FIFO antes que o processo de gravação tenha a chance de removê-lo e recriá-lo? Eu poderia usar sleep
a esse respeito, mas não parece eficiente.
Além disso, também achei que poderia suspender o processo do leitor até que ele recebesse um sinal do processo do gravador, mas o PID do processo do leitor não é conhecido. Pense neles como dois scripts separados e diferentes. Assim que o SO é inicializado, eles iniciam as execuções.
open()
é usado para abrir o FIFO. Se eu close
o FIFO e reabri-lo para escrever em um loop, ele é limpo / liberado? (garantia?) Verificar o inode sempre gera o mesmo número de inode. Quero dizer, mesmo que eu use rm <fifo.name>
via terminal, então recrie FIFO, o mesmo número de inode é dado.
FIFO = '/tmp/test.fifo'
fd = os.open(FIFO, os.O_RDONLY)
info = os.fstat(fd)
print("inf fstat " + str(info.st_ino))
statinfo = os.stat(FIFO)
print("inf stat " + str(statinfo.st_ino))
Saída:
inf fstat 521406
inf stat 521406