我正在使用Altera DE1-SoC板,在其中我使用C程序从传感器读取数据。在while循环中将连续读取数据并将其写入文本文件。我想使用python程序读取此数据并显示数据。
问题是我不确定在文件读写过程中如何避免冲突,因为这些冲突需要同时发生。我当时正在考虑创建一个互斥锁,但是我不确定如何实现它,以便两种不同的程序语言都可以使用它。
有没有简单的方法可以做到这一点?谢谢。
答案 0 :(得分:1)
您可以使用cdll.LoadLibrary
将C库加载到Python中,并调用一个函数来获取C互斥锁的状态。然后在Python中,如果C互斥锁处于锁定状态,则不会读取;如果已被解锁,则可以读取。
答案 1 :(得分:1)
只要您可以两次打开该文件(一次用于读取,一次用于写入),操作系统便会处理。只需记住从C代码中刷新以确保您的数据实际上已写入磁盘,而不是保存在内存中的缓存中。
答案 2 :(得分:1)
我不确定冲突是什么意思。我假定它是一条折成两半的线,因为一个进程开始写入而另一个进程中断了它并开始读取。
您可以使用pyinotify (0.9.6)
包来查看您感兴趣的日志文件中的修改事件。假设唯一的修改是追加操作,则可以使用如下代码:
import pyinotify
import functools
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, default_proc_fun=lambda _e: _e)
wm.add_watch('/home/user/somefile', pyinotify.IN_MODIFY)
def my_read_routine(notifier, fd):
while True:
content = fd.readline()
if not content:
break
print(content, end = '')
read_callback = functools.partial(my_read_routine, fd=open('somefile', 'r'))
notifier.loop(callback=read_callback)
default_proc_fun
中的这个神秘的lambda只是一个虚拟替换,用于删除默认处理例程,该例程将事件打印到stdout。从参数列表中删除它,以了解我的意思。