問題タブ [mkfifo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ファイル名を期待してC APIにデータをフィードする
Linux で単純な C プログラムを作成しており、ファイルからのデータを期待する既存のライブラリの API を使用したいと考えています。const char* としてファイル名を入力する必要があります。しかし、ファイルのコンテンツと同じように、ヒープに割り当てられたバッファーに既にデータがあります。十分な RAM があり、高性能が必要です。一時ファイルをディスクに書き込むのを避けたいのですが、ファイルのように見える方法でこの API にデータを供給する良い方法は何ですか?
これが私のコードの安価なふりバージョンです:
marvelouslibrary.h:
ライブラリが最初に設計された normal-persons-usage.cpp:
myprogram.cpp:
明確にするために言うと、marvelouslibrary はポインターによってデータを受け入れる API 関数を提供していません。ファイルの読み取りのみが可能です。
パイプと mkfifo() を考えましたが、プロセス間の通信を目的としているようです。私はこれらのことについて専門家ではありません。名前付きパイプは、同じプロセスで読み取りと書き込みを行っても問題ありませんか? これは賢明なアプローチですか?
または、賢いことをスキップして、シャッドアップして一時ファイルを書き込むという計画「B」に進みます。しかし、新しいことを学び、この状況で何ができるかを知りたいと思っています。
named-pipes - 「mkfifo」の作成に似ているが双方向の名前付きパイプ
「mkfifo」で作成したような名前付きパイプを作成したいのですが、注意点が1つあります。パイプを双方向にしたい。つまり、プロセス A が fifo に書き込み、プロセス B がそこから読み取る、またはその逆が必要です。「mkfifo」によって作成されたパイプにより、プロセス A はパイプに書き込まれたデータを読み取ることができます。通常は 2 つのパイプを使用しますが、実際のデバイスをシミュレートしようとしているので、open()、read()、write() などのセマンティクスを可能な限り実際のデバイスに近づけたいと考えています。2 つのパイプまたは名前付きソケットに頼らずにこれを達成する手法を知っている人はいますか?
python - Pythonで一時FIFO(名前付きパイプ)を作成しますか?
Python で一時 FIFO (名前付きパイプ) を作成するにはどうすればよいですか? これはうまくいくはずです:
ただし、 Python Docs 11.6の大きな警告と、非推奨であるため削除される可能性があるため、躊躇しています。
編集:私が試したことは注目に値しますtempfile.NamedTemporaryFile
(そして拡張によってtempfile.mkstemp
)が、os.mkfifo
スローします:
OSError -17: ファイルは既に存在します
mkstemp/NamedTemporaryFile が作成したファイルに対して実行すると。
python - ファイル記述子で Python Twisted を使用する例
ツイストを使用して、マスター プロセスと一連のスレーブ プロセス間の Linux パイプ (os.pipe()) および fifo (os.mkfifo()) 間の通信を制御しようとしています。これらのタイプのファイル記述子にtwistedを使用できると確信していますが(結局のところ、twistedは* nixがファイル記述子として抽象化するtcpソケットに最適です)、このタイプの使用例は見つかりません。リンク、サンプル コード、またはアドバイスはありますか?
python - Windows 用の python os.mkfifo()
短いバージョン(短いバージョンに答えることができれば、それは私のために仕事をします、残りは主に同様の仕事をしている他の人々の利益のためです):
WindowsのPythonで、同じファイルに添付された2つのファイルオブジェクトを作成したい(ハードドライブ上の実際のファイルである必要はありません).1つは読み取り用、もう1つは書き込み用で、読み取りが終了した場合読み取ろうとしても EOF を取得しません (何かが書き込まれるまでブロックされます)。Linux では os.mkfifo() が機能すると思いますが、Windows では存在しません。何ができるでしょうか?(ファイルオブジェクトを使用する必要があります)。
いくつかの追加の詳細: stdin と stdout (raw_input() と print を使用) を介して特定のゲームをプレイする python モジュール (私が作成したものではありません) があります。stdin と stdout を介して、同じゲームをプレイする Windows 実行可能ファイルもあります。私は彼らに対戦させて、彼らのすべてのコミュニケーションを記録したいと思っています。
これが私が書くことができるコードです(get_fifo()
Windowsでそれを行う方法がわからないため、関数は実装されていません):
c - CでFIFOを開くのに問題がある
CでFIFOを開くのに問題があります。最初にアクセス許可:0777でmkfifo()関数を使用してFIFOを作成しましたが、それらを開こうとすると、最初のFIFOのみを開くことに成功し、プロセスがスタックします。 2番目のFIFOを開くと、これが私のコードです。
これは実行されませんが、2行目をコメントすると実行されます!プロセスごとに開くFIFOの数に制限はありますか?なぜこれが起こっているのかわかりません..問題が何であるかを理解するために3時間費やしただけですが、結果はありません:(
mysql - LinuxのFIFOパイプからmysqlテーブルデータにデータを継続的に挿入します
fifoパイプからmysqlテーブルにデータを挿入したいのですが、今のところ、これはfifoパイププロセスが強制終了されるまで可能です。
コマンド :
mysqlのプロセスがkillプロセスによってダウンするまで、fifoパイプのデータが挿入されます。
でFIFOパイプデータのプロセスを強制終了せずにデータを挿入することは可能ですか?
ありがとう!!
python - PythonとFIFO
LinuxでPythonを使用してFIFOを理解しようとしましたが、理解できない奇妙な動作を見つけました。
以下はfifoserver.py
そしてこれはfifoclient.py
mkfifo input
また、とを使用して2つのFIFOを作成しましmkfifo output
た。
私が理解していないのは、いくつかのリクエストの後に2つのコンソールからサーバー(with python fifoserver.py input output
)とクライアント(with )を実行すると、クライアントpython fifoclient.py
が「壊れたパイプ」エラーでクラッシュする理由f.flush()
です。クラッシュする前に、数百から数千の正しく処理されたリクエストが正常に実行されていることを確認したことに注意してください。
私のコードの問題は何ですか?
bash - スクリプトで exec 3>myfifo を使用し、echo foo>&3 でパイプを閉じないようにするにはどうすればよいですか?
ターミナルで使用できるのと同じ方法で、bash スクリプトで exec 3>myfifo を使用できないのはなぜですか?
名前付きパイプを使用して、awk フィルターを単純な「サーバー」に変えています。これは、クライアントからテキスト入力を受け取り、フィルター処理し、NUL でフラッシュできるはずです。
ターミナル 1 では、サーバーは次のように実行されています。
そして、NUL で終わる入力を入力パイプに入れ、出力パイプから読み取り、EOF をサーバーに送信せずに終了する単純なスクリプトを用意しました (サーバーは不要です)。再起動します):
ここで、ターミナル 2$ echo This is wrong | bash client.sh
で を実行すると元にThis is correct
戻りますが、ターミナル 1 ではサーバーが再起動することが示されます。ただし、ターミナル 2 内から client.sh からコマンドを実行すると、再起動しません。
私もできるので、それはexecコマンドに関連しているようです
そして再起動しません。私なら
(もちろん、一度再起動します)そして
毎回再起動します。そのため、スクリプト内の exec コマンドは効果がないようです。ただし、スクリプト内の exec コマンドの後に置くls /proc/$$/fd/
と、実際には正しいパイプを指していることがわかります。
ここで何が欠けていますか?
c - Cで入力/出力にリダイレクトする構文(UNIX)
mkfifo()関数を使用し、forkを使用して子プロセスを作成した後、標準の入出力を名前付きパイプにリダイレクトできる構文を見つけようとしています。
構文については、どのマニュアルページを参照する必要がありますか?
ありがとう、アーロン