一般に、私は.cと.pyプログラムによって読み書きされる2つのFIFOを作成しています。私の.cプログラムがPythonと対話できるようにするために、私は<python2.7/Python.h>
ライブラリを含んでいます。CとPython間のFifoファイルの読み込みと書き込み
まず、私の.cプログラムは、CFifoというファイルを作成し、fprintfを使用してそのファイルにテキストを書き込みます。問題はない。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <python2.7/Python.h>
int main() {
FILE *CFifo, *pythonFifo, *pythonFile;
char buffer[1024];
// declare python
Py_SetProgramName("writer.py");
// init python
Py_Initialize();
// open python
pythonFile = fopen("writer.py", "r");
// C writes to file, python reads from this file
CFifo = fopen("./CFifo", "w");
// Print strings to file using fprintf
fprintf(CFifo, "This is a test");
// close file python reads
fclose(CFifo);
私のCプログラムの2番目の部分は、私のPythonプログラムで(第2のFIFOキューに)書かれた情報を読み取る必要がありますが./pythonFifo
を開いたときに代わりにそれだけの端末でハングアップします。
これはfifoキューへの書き込みを担当するpythonセクションです。
# open fifo file that python writes to
filename_write = "./pythonFifo"
pipe = os.open(filename_write, os.O_WRONLY)
for output in finalStringList:
os.write(pipe, output)
os.close(pipe)
2番目のファイルの目的は、最初のファイルから読み取った変更情報を書き込むことです。
Pythonプログラムを非同期で実行するように勧めますか?このデッドロックを解決する "自然な"方法ではないでしょうか? – Alfe
@Alfe - これは素晴らしい方法ですが、もっと自然な方法がわかりません。それは私たちが知らない他の設計上の問題に依存します。 – tdelaney
私はこの 'PyRun_SimpleFile'が新しいプロセスを開始してPythonの処理を開始し、子プロセスの終了を明示的に待機すると仮定しました。私たちがすべてプロセスを並行して実行するオペレーティングシステムを使用しているため、「自然」な方が待ち時間がかかりません。あなたの反応は私を疎外しました。 'PyRun_SimpleFile'は現在のプロセス内でそのタスクを実行していますか?その後、FIFOを使用することはおそらく一般的に間違った選択になるでしょう。 – Alfe