我想通过带有文件的目录结构来表示守护进程的状态。守护程序负责为控制传感器提供shell接口。类似于Linux设备模型或GPIO控制台接口的实现方式,只需使用普通文件,用Python用户空间编写:)。
示例:
守护程序运行并创建列出可用传感器的目录结构。目录结构的外观示例:
sensors
`-- sensor1
`-- sensor-ouput
sensor-ouput
只是一个普通文件,用作当前传感器值的抽象。
以下是创建示例结构的代码:
import time,os
if not os.path.exists('sensors/sensor1'):
os.makedirs('sensors/sensor1')
f = open('sensors/sensor1/sensor-ouput','w+')
for i in range(100):
time.sleep(1)
f.seek(0)
f.write(str(i))
f.flush()
f.close()
问题:
echo 1 > sensor-ouput
没有出错。答案 0 :(得分:2)
您可以写入文件,因为默认情况下文件未锁定。你需要用os.lockf()来锁定它。
您的多个读者可能会在您期望相同的位置读取不同的值。请考虑以下情况
writer writes 10 reader #1 reads 10 reader #2 reads 10 writer writes 11 reader #3 reads 11
此时读者#3处于与读者#1和#2相比处于不同的状态。
命名管道是FIFO结构它们确保文件没有的消息顺序。另一方面,管道不是持久的,一旦消息被读取它就会消失。
编辑:实际上fcntl.flock()可能是你想锁定的,而不是os.lockf()