問題タブ [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.
java - プロセス間通信 FIFO java
こんにちは、FIFO を使用して Java で IPC を実装しようとしています。
次に、FileWriterを開こうとしました
しかし、この行でブロックされます。
何が問題なのですか?
c - FIFO に書き込まれたすべてのメッセージが読み取り時に受信されるわけではありません
Linux で C の fifo ファイルを使用しているときに奇妙な問題が発生しました。
コードから始めましょう:
ここで、コードで実行したいことの詳細を説明します。
このようなプログラムを実行した後:
端末に入れたい:
しかし、これの代わりに、私はこれだけを得ています:
問題は、FIFO にいくつかのメッセージを書き込みたいのですが、FIFO を読み取ることによって、そこに格納されているテキスト全体を受信することです。しかし、残念ながら、最後のメッセージのみが標準出力 (この場合は端末) に保存/書き込まれます。実行されたコマンドは次のとおりです。
この行を削除しようとしました:
FIFO ファイルが既に存在する場合、この行で既存の FIFO ファイルが作成され、上書きされる可能性があると考えたからです。しかし、これは何も変わりませんでした。
では、これを意図したとおりに機能させるにはどうすればよいでしょうか?
c - fifo で同時に読み取りと書き込み (バック)
fifo を使用して、file1 の内容を他の file2 にコピーしようとしています。fifo に書き戻したい最初の 4 文字 (file1 から fifo にコンテンツを書き込むときではなく、読み取り中) にそれを file2 にもコピーします。ただし、最初の 4 文字は後ろに追加されず、途中でランダムに挿入されます。私のコードは
さて、ターミナルの場合、私は実行します
$ ./a.out a.txt b.txt
a.txt から b.txt にコピーしたいのですが、b.txt には a.txt と最初の 4 文字が含まれており、文字間にランダムに挿入されています。
java - Java で読み取られるブロッキング ファイルの設定
Java で読み込むブロッキング ファイルを設定したいと思います。つまり、によってラップされFileInputStream
、任意のread()
メソッドが呼び出されると、呼び出しがブロックされるようなファイルを用意します。
OSに依存しない簡単な方法は考えられません.UnixのようなOSではmkfifo
、そのファイルを使用してFIFOを作成して読み取ることができます。考えられる回避策は、非常に大きなファイルを作成してそこから読み取ることです.スタックをキャプチャする前に読み取りが完了する可能性は低いですが、それは醜くて遅いです.
対応するソケットのread()
ケースは簡単にセットアップできます。自分でソケットを作成してそこから読み取ると、確定的なブロッキングを行うことができます。
その目的は、メソッドのスタックを調べて、そのような場合にトップ フレームが何であるかを判断することです。実行中のすべてのスレッドのスタック トレースを定期的にサンプリングし、そのスレッドが現在行っていることを分類しようとするコンポーネントがあるとします。実行できることの 1 つは、ファイル IO です。そのため、ファイル IO 中に「スタックのトップ」がどのように見えるかを知る必要があります。私はすでに実験(さまざまな方法でファイルを読み取り、スタックをサンプリングするだけ)によってそれを決定しましたが、これが変更された場合に失敗するテストを書きたいと思っています。
このようなテストを作成する自然な方法は、ファイルの読み取りを行うスレッドを開始してから、トップ フレームを調べることです。これを確実に行うには、ブロッキング読み取りが必要です (そうしないと、スタック トレースが取得される前にスレッドが読み取りを終了する可能性があります)。
c - mkfifo でスーパー ユーザー プロセスからアクセス許可を付与する
スーパーユーザープロセスを使用してパイプを作成する必要がありますmkfifo()
。そのパイプは、スーパーユーザーではないプロセスから書き込み可能でなければなりません。
読者:
ライター:
./writer
とを呼び出しますsudo ./reader
。
私のライターがパイプに書き込もうとすると、セグメンテーション違反が返されます。そして、調べてみると、/tmp/myfifo
そのアクセス許可が見つかりましたprwxr-xr-x
が、必要ですprw-rw-rw-
。
c - ループがループの継続に失敗する
特定のFIFOが書き込まれるたびに新しいフォルダーを作成するコードに取り組んでいました。
}
ただし、実行すると次のようになります。
私は何を間違えましたか?ループを継続せず、さらに入力を待たないのはなぜですか? 書き込み停止時にFIFOが閉じないように読み書き用にFIFOを開いているのですが、うまくいきませんでしたか?