問題タブ [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 - FIFO Pipelining サーバーが一定量しか受信しない
そこで、mkfifo() を使用して C で基本的な FIFO パイプラインを実装しようとしています。これまでの私のコードクラスは次のとおりです。
main.c:
client.c:
サーバー.c:
現在、パイプラインは機能していますが、何らかの理由でサーバーはメッセージの一部しか受信していません。たとえば、プロトコルから「HELLO WORLD」という文字列を取得すると、次の出力が得られます。
サーバーはメッセージ全体を受信する必要がありますが、そうではありません。私は何を間違っていますか?助けてくれてありがとう!
linux - ログ mkfifo: ファイルを指定する必要があります
このスクリプトは ksh ファイルにあります。
時々それは働いています。そうでない場合もあり、エラーや警告はなく、単なるログです
インターネットで検索しましたが、「ファイルを指定する必要があります」という mkfifo メッセージについて何も見つかりませんでした。そして、コードベースにそのメッセージが含まれていないことは確かです。警告か何かかわかりません。そのmkfifoメッセージに関して何か(ドキュメントなど)を持っている人はいますか?
ここに mkfifo に関する情報が見つかりました ここにリンクの説明を入力してください ここにエラーメッセージについては何もありません。
EDIT1: そのスクリプトの前に、正常に実行される多くのスクリプトがあります。そのため、FOLDER にスペースを確保することはできません。mkfifo のメッセージ「mkfifo: must specify file」に関連するリソースを持っている人はいますか?
c - 名前付きパイプ クライアントの識別方法
リクエストに応じてキャプチャ画像を作成するサーバーがあるとします。
クライアントは、6 チャット ワードと ID を持つ名前付きパイプを介してサーバーと通信します。
サーバーはイメージを作成し、名前付きパイプを介してクライアントに送信します。
クライアントには、サーバーと通信して結果を取得し、word.png ファイルに保存する関数 create_captcha_files(const char* word) があります。
サーバーには、対応する画像をバッファーに書き込み、最大 16384 バイトの書き込みバイト数を返す関数 size_t captcha(const char* word, char * buffer) が既に実装されています。
したがって、クライアントは次のようになります。
そしてサーバー:
windows - ホスト ディレクトリをネットワーク共有としてマウントすると、Windows ホストの docker コンテナから babel-watch が機能しない
Windows で docker を使用しており、src ディレクトリは(COPY ではなく) docker コンテナー内のネットワーク共有としてマウントされています。したがって/var/app/server
、ドッカーの内部には、実際にはネットワーク共有があり、ホスト上の実際の場所は ですC:\...project\server
。[補足として、docker が Linux でどのように機能するかについてはよくわかりません。Linux でのマウントにもネットワーク共有をまだ使用しているのでしょうか? そうでない場合、これは単にWindowsの問題である可能性があるため]
を使用するbabel-watchを使用していmkfifo
ます.dockerコンテナ(VM)内で実行されているため、mkfifoはそのネットワーク共有ディレクトリにファイルパイプを作成できません。[補足: babel-watch は、mkfifo.exe ユーティリティを持つ cygwin を使用して docker 外部の Windows で実際に動作します]
これに対する回避策はありますか?
私はbabel-watchソースを編集して、mkfifoが代わりにファイルを作成するよう/var/app
にしようとしました/var
(それはまだdockerコンテナの領域内にあります)。この方法mkfifo
は実際には機能しますが、ファイルの変更はbabel-watchによって見られません。基本的に、ファイルの変更情報は、ネットワーク共有バリア/var/app/server
(マウント ポイント) を/var/app
(docker 内の実際のディレクトリ) に伝達することができないと思います。
ios - iOSでFIFOファイルを作成して使用することはできますか? (オブジェクト)
古き良き FIFO を使用して、独自のiOS アプリケーションの別の部分にデータを渡したいと考えています。dispatch_io_create_with_path を見ましたが、反対側がプレーンな read() でデータを読み取れるようにしたいです。FIFOファイルを使用することはできますか? どうやって?
Xcode7 ObjC で次のコードを試しました (パスは Documents dir + filename を指します):
mkfifo() は 0 を返しますが、open() は -1 で失敗します。興味深いことに、「O_RDONLY」プログラムで open() を試すと、プログラムが待機しているため、そこで何かが起こっています..
c - 名前付きパイプが期待どおりに機能していません。同じメッセージが何度も読まれる
名前付きパイプを使用してプロセス間で通信しようとしています。期待どおりに動作していません。同じメッセージを何度も読み込んでいます。
プロセス 1: (パイプを作成し、100 メッセージを読み取るか、100 メッセージを読み取るまで読み取りを開始します)
プロセス 2 (同じパイプに書き込む)
プロセス 1 の出力 ( Hi1 の場合と終了の場合がある)
両方のプロセスの fd がブロックされています。プロセス1がメッセージを何度も何度も読んでいる理由について、誰かが光を当てることができますか
linux - Linux シェルは、パイプを使用してプログラムの stdin と stdout をラップします
そのため、組み込みの Linux ARM プラットフォームで実行されている、画面のないインタラクティブなプログラムがあり、変更することはできません。それと対話するには、組み込みのLinuxディストリビューションにsshし、組み込みコマンドを使用したある種のカスタムコマンドラインであるプログラムを実行する必要があります。プログラムは終了せず、SIGINTのみがプログラムを終了します。
バックグラウンドで実行し、このようなSSHコマンドを送信してパイプを使用して通信できるようにすることで自動化しようとしていますssh user@host echo "command" > stdinpipe
。この部分は機能します。シェルスクリプトで次のような例が提供されています(bashは使用できません。マシンにはashしかインストールされていません):
次のようにパイプに書き込むことで、プログラムを簡単にコマンドできるようになりました
ターミナル内のすべてを出力します。問題は、SSH セッションが開いている場合は機能しますが、前述のようにコマンドを 1 つずつ送信するだけでは機能しないことです (念のため、exec_command()
メソッドで Python で paramiko を使用していますが、 'それは関係ないと思います。使用できますinvoke_session()
が、対処する必要はありませんrecv()
)
そこで、プログラムの出力をパイプにリダイレクトすることにしました。そこで問題が発生します。私の最初の試みはこれでした(すべてがルートとして実行され、ルートホームフォルダーに保存されているという事実を無視してください。それが私が取得した方法であり、今はそれをきれいにする時間がありません。さらに、私はソフトウェアを管理する 1 つ) :
それだけで端末自体の中で機能します。ここで、SSH セッションを開いたまま別のターミナルを開いて入力するとssh root@host "echo command > /root/binary/inpipe"
、コードが実行されますが、入力したばかりのコマンドとその結果が、開いたままの他のターミナルに出力されます。したがって、明らかにオプションではありません。何らかの方法で出力をキャプチャする必要があります。
プログラムが起動しないように変更./command_bin &
し./command_bin >outpipe &
た場合、理由$command_pid
がわかりません。空であるため、プロセスを見つけることができません。ps -A
代わりにプログラムの開始に置き換える/proc/${command_pid}/exe < inpipe 2>&1 &
と、スクリプトの実行が終了したとき/proc/${command_pid}/exe < inpipe &>outpipe &
に inpipe に問題なく書き込むことができますが、echo "command" > inpipe
いずれかを試してみると、ハングして何もしません。コマンドの開始時に使用してみましたが、実際には役に立ちません。fifo の代わりに通常のファイルを使用して出力をリダイレクトしようとしましたが、結果はまったく同じでした。cat < outpipe
tail outpipe
nohup
私はこのことに一日中費やしましたが、それを機能させることができません。なぜこれが機能しないのですか? また、私はおそらくこれを行うためにひどい方法を使用しているだけですが、他に方法はありますか? ここで必須なのは、ssh 経由でボードに接続する必要があることと、オンボード デバイスと通信しているため (I2C、OneWire プロトコルなどを使用)、コマンド ライン ユーティリティを開いたままにしておく必要があることだけです。
簡単にするために、いつでもプログラムの標準入力に書き込めるようにし、その標準出力を別の場所(ファイル、バッファ、気にしない)に移動させて、後で任意の時間後に簡単に取得できるようにしたいと考えていますcat、tail、またはsshを使用したその他のコマンド。