問題タブ [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.
php - posix_mkfifo の制限
PHP には、基本的に fifo を作成する posix_mkfifo() という呼び出しがあります。このファイル/FIFO に制限を設定する方法はありますか? そうしないと、誰もデータを引き出さないと、無制限に大きくなる可能性があります。
助けてくれてありがとう。
python - 入力ファイルの内容に応じて、いくつかの名前付きパイプ (fifo) を作成します
このawkスクリプトは、1 つのログ ファイルをいくつかの小さなファイルに分割します。
入力ファイルの例:
生成された出力ファイル名の例:
しかし今、通常の file の代わりに出力 fifoを作成したいと思います。
fifo (名前付きパイプ) は、現在の通常のファイルと同じファイル名を使用する必要があります。たとえば、次のようにmkfifoツールを使用してシェル スクリプトを作成できます。
常識:
- スクリプトは、考えられるすべてのトピックとフィールドを認識する必要はありません
- スクリプトは、同じ fifo を何度も作成する必要はありません
awkがこの目的に適していない場合は、 bash、zsh、perl、pythonなどの他の言語を使用できます ...
このスクリプトを実装するには、どのプログラミング言語を選択しますか? shell/awk/perl/python/ruby...
実装として何を提案しますか?
編集:ケビンの答えは正しいです。彼のスクリプトの別の代替手段もあります。
awk
または他のプログラミング言語に基づいてアイデアを提案することもできます;)
スクリプトをテストするには、別のターミナルで以下のシェル コマンドを実行します。
linux - Linux: ノンブロッキング モードでライター側で名前付き fifo を使用する方法はありますか?
Linux のパイプに関する多くの質問と回答を見つけましたが、ほとんどすべてがリーダー側について議論しています。
データが利用可能になり、読み取りプロセスが接続されるとすぐに名前付きパイプにデータを配信する準備ができているプロセスの場合、非ブロッキング方式で次の方法があります。
- リーダーがパイプを開くのを待ち (poll(2))、
- パイプへの書き込みがブロックされないというシグナルをループ (再び poll(2)) で待機し、
- そのようなシグナルが受信されたら、ブロックせずにパイプに書き込むことができるバイト数を確認します
(2.) のやり方は理解できましたが、(1.) と (3.) について一貫した答えを見つけることができませんでした。
編集:パイプ用の(のような)FIONWRITEを探していましたが、Linuxには(パイプ用の)FIONWRITEがありません(?)
EDIT2: ライターの意図したメイン ループ (一種の疑似コード、ターゲット言語は C/C++):
python - Python を使用して要求を 1 つの FIFO に書き込み、別の FIFO から応答を読み取る
/tmp の名前付き FIFO を使用して、プロセス (Kamailio SIP サーバー) と通信する必要があります。それが機能する方法は、私自身の応答 FIFO を設定し、応答を FIFO に書き戻す Kamailio に要求を書き込む必要があるということです。
それで、私はそれがどのように進むべきかを理解しています..
- mkfifo は、応答を受信するための /tmp 内の新しい一時 FIFO です。os.getpid() を使用して、/tmp/response_1234_fifo などの一意の名前を作成します
FIFO を open(fifo, "r") して read() しようとしますが、書き込み用に FIFO を開いている人がまだいないため、これは open() でブロックされます。
既知の静的 FIFO に要求を書き込みます (たとえば、/tmp/request_fifo)。このリクエストには、レスポンス FIFO の名前が含まれています
Kamailio はリクエストを処理し、書き込み用にレスポンス FIFO を開き、それに対するレスポンスを write() します。
この時点で、open() はおそらくブロックを解除し、read() はデータを受け取るはずです。しかし、そうではないようです。うまくいくこともありますが、うまくいかないこともあります。
応答を書き込んだ後、Kamailio は応答 FIFO を閉じます。これにより、次の read() の EOF が発生します。
これで、一時応答 FIFO を rm できるようになりました
スレッド化、「cat < response_fifo」の popen:ing、さらにはノンブロッキングの open と polling を使用しようとするなど、いくつかの異なる方法でこれを実行しようとした後、私の脳はシャットダウンしました..
コマンドを実行するための Kamailio シェル スクリプトがどのようにそれを実行するかを見ると、とてもシンプルで泣けてきます :)
Pythonでエレガントなソリューションを持っている人はいますか?
c - C での FIFO 読み取り/書き込みの奇妙な動作
FIFO を使用してサーバーを再現する C プログラムがあります。このプログラムは、入力 FIFO から 2 行 (数値n
と文字列) を読み取り、出力 FIFO行にstr
書き込みます。次のコードを書きました。n
str
このプログラムはエラーなしでコンパイルおよび実行されますが、実行ごとに異なる数の文字列を出力します。たとえば、入力 FIFO の 2 つの入力行が である場合、実行ごと5\nhello
に 1 ~ 25 回の が出力されhello
ます (頻度は完全にランダムに見えます)。
私はこれに2日間立ち往生しています。助けてください。
php - PHP と C の間の FIFO
FIFOSを使用して2つのプロセスを通信したい。1 つのプロセスは C で作成し、もう 1 つのプロセスは PHP で作成しています。問題は、FIFO を使用すると、リーダーが FIFO を開くまでライターがブロックされ、反対方向でも同じになることです。私はそれをよりよく説明します.xmlリクエストを受け取るPHPプロセスがあります。PHP は xml を受け取り、FIFO1 に送信します (C プロセスに接続)。C プロセスは、FIFO1 を読み取り、xml で何らかの処理を行い、FIFO2 (PHP に接続) に応答を送信します。ノンブロックでやりたい。つまり、PHP プロセスが FIFO2 から何も読み取ることができない場合、ブロックされず、その間に xml 要求を受け取ることができます。興味のある人がいる場合は、ここにコードを投稿できます。
ありがとう ;)。
objective-c - fifo ファイルに書き込む
を使用してファイルを作成しましたmkfifo /tmp/my.fifo
。で文字を取得できるように、(Objective C を使用して) ファイルに文字を書き込みたいと思いますtail -f /tmp/my.fifo
。何らかの理由でこれは機能しません。tail コマンドは 1 文字だけを表示し、出力を停止します。
目的の C コード:
NSLog は何も出力しません。したがって、Objective C の観点からは、明らかにエラーはありません。
c - 名前付きパイプを使用して C でチャットを実装する
FIFO 名前付きパイプを使用して、クライアントとサーバー用に 2 つのパイプを作成しました。次に、クライアントとサーバー間の通信を実行しようとしました。クライアントからサーバーにメッセージを送信する場合、通信は機能しますが、その逆は機能しません。親切に助けてください。
ここに3つのコードがあります:
fifo.c (パイプを作成するため)
server.c (クライアントから送受信するため)
client.c (サーバーから送受信するため)
linux - ドライバーを使用する 2 つのプロセスが通信できるように、Linux char デバイスドライバーで FIFO を使用する方法
仮想デバイス用のcharデバイスドライバーがあります。デバイスドライバーを使用する2つのプロセスがそれらの間で文字を転送できるように、デバイスドライバーにFIFOが必要です。kfifo を試してみましたが、これは初めてで、使いにくいと感じています。LinuxドライバーでFIFOを実装する他の方法を提案してください。