簡體   English   中英

在python中讀取文件時寫入C中的文件

[英]Writing to a file in C while reading from it in python

我正在使用Altera DE1-SoC板,我正在使用C程序從傳感器讀取數據。 數據在while循環中連續讀取並寫入文本文件。 我想使用python程序讀取這些數據並顯示數據。

問題是我不確定如何在文件的讀/寫期間避免沖突,因為這些需要同時發生。 我正在考慮創建一個互斥體,但我不確定如何實現它,因此兩種不同的程序語言可以使用它。

有一個簡單的方法嗎? 謝謝。

您可以使用cdll.LoadLibrary將C庫加載到Python中,並調用函數以獲取C互斥鎖的狀態。 然后在Python中如果C互斥鎖是鎖定然后不讀,如果它被解鎖則它可以讀取。

只要您可以打開該文件兩次(一個用於讀取,一個用於寫入),操作系統將處理此問題。 只記得從C代碼中刷新以確保您的數據實際寫入磁盤,而不是保存在內存中的緩存中。

我不確定你的沖突是什么意思。 我假設它是一條線被分成兩半,因為一個進程開始寫入,另一個進程中斷它並開始讀取。

您可以使用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。 從參數列表中刪除它,看看我的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM