在python中读取文件时,用C写入文件

时间:2019-06-18 15:01:36

标签: python c io mutex

我正在使用Altera DE1-SoC板,在其中我使用C程序从传感器读取数据。在while循环中将连续读取数据并将其写入文本文件。我想使用python程序读取此数据并显示数据。

问题是我不确定在文件读写过程中如何避免冲突,因为这些冲突需要同时发生。我当时正在考虑创建一个互斥锁,但是我不确定如何实现它,以便两种不同的程序语言都可以使用它。

有没有简单的方法可以做到这一点?谢谢。

3 个答案:

答案 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。从参数列表中删除它,以了解我的意思。