問題タブ [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.
linux - fifo とリンクを使用して Web ページからリモート プロセスを制御する (Linux)
Linuxサーバーでmpg123を使用しており、リンクを使用してさまざまなコントロールを送信し、Webページ(apache)から制御しようとしています。
mpg123 には-Cフラグがあるため、文字を送信できます。"s" キー = 開始/停止、"f" キー = 次のトラックなど。
mpg123 にこれらのキーを fifo で送信して、mpg123 stdin を fifo stdout に変更できると思いますが、この場合の fifo の使用方法がわかりません (mpg123 を別の stdin に「リッスン」させる方法)。私がやったことは次のとおりです。
それで:
これは動作しません。fifos を使用して、実行中の mpg123 にメッセージを渡す方法を説明できますか? 私はそれをグーグルで検索しましたが、欲しいものが見つかりません。
この質問は私にいくらかの光を与えるようですが、mpg123 に fifo の出力をリッスンさせる方法はまだわかりません。
前もって感謝します、
c - stat() が EFAULT を返すのはなぜですか?
2 つの別個の bash セッションから 2 つの別個のプロセスとして実行すると、2 つの間の名前付きパイプを開いて、文字列を一方から他方に送信できるようにするプログラムを作成しています。
プロセスが 1 つの端末から最初に実行されるとstat(fname, buf) == -1
、パスにファイルが存在するかどうかが確認され、fname
存在しない場合は作成されます。FIFO
プロセスは、それが を作成するものであったため、それを介してメッセージを送信するものであると想定し、それに応じて続行します。
その後、別の端末からプログラムを実行できます。別の端末は、 をチェックすることによって、パイプを介してメッセージの受信者になることを決定する必要がありますstat(fname, buf) == -1
。現在、条件は false を返す必要があり、現在ファイルが存在するため、stat(fname, buf)
それ自体が返されるはずです。0
fname
しかし、私が識別できない理由により、2 番目のプロセスが実行されると、stat(fname, buf)
まだ が返されます-1
。変数errno
は に設定されEFAULT
ます。のみのman
ページは「Bad address」と記載されています。エラーが発生する理由、または「不正なアドレス」の意味を特定するのに役立ちます。よろしくお願いします。stat()
EFAULT
ファイルが意図したとおりに最初のプロセスによって実際に作成されていることを確認しました。最初のプロセスは、もう一方の端が開かpipe = open(fname, O_WRONLY);
れるまで続行できないため、ラインで待機します。pipe
編集: 以下は、私のコードの自己完結型の実装です。ここで説明した問題がコンパイルされ、発生することを確認しました。
c - FIFO を開けません
Ubuntu で FIFO をテストするためにこのプログラムを作成します。メイン プログラムは子プロセスを作成して何かを書き込み、親プロセスはそれを読み取って出力します。
ただし、実行するたびにこれが表示されます。FIFOがクレートされていることは確かです。
c++ - O_WRONLY を使用して open() でハングする C++ Linux 名前付きパイプ
これは、名前付きパイプを開き、文字列を書き込み、パイプを閉じる単純なコードです。以下で説明するように、パイプは別の関数で作成されます。
しかし、open() の呼び出しがハングします。呼び出し時に fifo "jobqueue" を使用するプロセスが他にないことと、キューが作成された後のキューのファイル権限が prwxrwxr-x に設定されていることを確認しました (mkfifo(ipcnm, 0777)
パイプの作成に使用しているだけです。
o
最初は、そのグループにこのパイプのアクセス許可がないことが問題だと思ったw
ので、chmod を使用して手動で変更しましたが、「キューが開いています」が出力されないため、ハングします。perror("open"); のエラー メッセージも表示されません。
私は何が欠けていますか?
c - mkfifo() が C でファイルを作成しない
C で名前付きパイプを作成しようとしていますが、成功していません。
これが私のコードです:
これを実行した後、ディレクトリを確認しましたが、作成されているファイルはありません。出力例を次に示します。
助けてください :)
更新 わかりました、パスがデスクトップに設定されたときに ls -l が機能したことがわかりました! しかし、現在のディレクトリ(main.cが保存されている場所)に設定しようとすると機能しません。「/」を追加してみました。およびパイプ名の前に「/」があり、どちらも機能しませんでした。