Python 使用用户空间中的常规文件模拟Linux设备模型
我想通过带有文件的目录结构来表示守护进程的状态。守护进程负责向控制传感器提供shell接口。类似于Linux设备模型或GPIO控制台接口的实现方式,只是使用普通文件,在用户空间中用Python编写:) 例如: 守护进程运行并创建列出可用传感器的目录结构。目录结构的外观示例:Python 使用用户空间中的常规文件模拟Linux设备模型,python,linux,ipc,Python,Linux,Ipc,我想通过带有文件的目录结构来表示守护进程的状态。守护进程负责向控制传感器提供shell接口。类似于Linux设备模型或GPIO控制台接口的实现方式,只是使用普通文件,在用户空间中用Python编写:) 例如: 守护进程运行并创建列出可用传感器的目录结构。目录结构的外观示例: sensors `-- sensor1 `-- sensor-ouput 传感器输出只是一个普通文件,用作当前传感器值的抽象 以下是创建示例结构的代码: import time,os if not os.
sensors
`-- sensor1
`-- 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()
问题:
- 为什么我可以在守护进程运行时写入文件<代码>回波1>传感器输出未给出错误
- 只有一个进程写入文件,并且可能同时进行多次读取。在这些场景中是否存在我遗漏的一些同步问题
- 鉴于文件是在ramfs分区上打开的,这种方法是否落后于使用命名管道
编辑:实际上,fcntl.flock()可能是锁定所需的,而不是os.lockf(),因为您不能做内核所能做的事情。绝对地内核从未实际写入文件。命名管道是一个完全不同的问题的解决方案。
内核从不实际写入文件
如果我将它们写入ram,它们也不会在这个解决方案中。如果你将文件写入ram磁盘,你仍然在写入文件。我认为更好的方法是像内核那样,即创建一个虚拟文件系统;用保险丝很容易做到。当其他应用程序试图读取(或执行其他操作)您公开的“假文件”时,fuse将调用您的函数,而不是不断地将(可能无用的)内容写入文件(也会将自己暴露于竞争条件等)。