問題タブ [unbuffered]
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 - setvbufはstdinをバッファリング解除できません
私の主な目的は、キーgetchar
を待つのではなく、キャラクターを取得したらすぐに戻ることでした。ENTER私はこれを試しました
これをのプロトタイプと比較するsetvbuf
stdin
バッファなしモードに設定する必要があります。
しかし、それでもgetchar()
待ち続けますENTER
私はこのような関連する投稿を見てきました
stdin
これは、バッファリングを解除するための代替方法を提案しています。しかし、なぜsetvbuf
メソッドが機能しないのか知りたいです
c++ - バッファリングされたストリームとバッファリングされていないストリーム
バッファリングされたストリームの場合、本では、バッファがいっぱいになるまで待ってからモニターに書き戻すと書かれています。例えば:
「バッファがいっぱいです」とはどういう意味ですか。
/li>私の本では、送信されたもの
/li>cerr
はすべて標準エラー デバイスにすぐに書き込まれると書かれていますが、これはどういう意味ですか?この例
ch
では、「hello」に割り当てられ、「world」は無視されますが、それはまだバッファにあり、将来のステートメントの結果に影響するということですか?
node.js - 最初にプロセスを閉じることなく、lftp を stdout に書き込む
child_process を使用して、node.js アプリケーションで lftp プログラムをラップしようとしています。問題は、lftp がその出力を stdout に書き込まないため、node.js でその出力をキャッチできないことです。サンプルコード:
lftp 子プロセスの stdin.end() を呼び出す行のコメントを外すと、ls コマンドからの出力が正常に端末に表示されます。そうしないと、プロセスが単にハングし、何も出力されません。
unbuffer も使用してみましたが、lftp の stdin に書き込むことができなくなったようです。通常の「[Resolving host address...]」を出力しますが、ls コマンドからの出力は出力しません。
私の質問は: node.js の child_process を使用して lftp と対話できるようにするには、どうすればよいですか?
linux - Linux、シリアル ポート、非バッファリング モード
Linux のシリアル ポートを使用して nob-blocking 読み書き機能を整理しようとしています。ここに私が持っているコードがあります: http://pastebin.com/RSPw7HAi すべて正常に動作しますが、バッファリングされています。つまり、コンソール + CR シンボルを介してシリアルに入力すると、select は新しい入力を検出します。それ以外の場合、単純な python スクリプトを介して入力すると、すべてのシンボルがバッファリングされ、キャリッジ リターン シンボルが送信されるまで待機します。したがって、この入力 (以下に示す) を使用すると、シンボルをどこかにバッファリングするだけです。USB2Serial コンバーター経由で PC を接続する必要があります
では、ここで何をすべきか誰か教えてもらえますか? Cファイルのポート開放内で何かを変更する必要がありますか、それともpythonスクリプトで行う必要がありますか? 後で flush() メソッドを使用しましたが、これも役に立ちませんでした。ところで、私は fcntl() 関数への F_NOCACHE 引数について調べました。しかし!それはすべて BSD と Darwin OS に関するものです。私が見る限り、Linux にはそのようなもの (fcntl への F_NOACHE 引数) はありません。
UPD:解決策を見つけたようです。
から取得: http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html
c++ - C++ と Python 間のバッファなし通信
Linux で C++ から Python にデータを渡したいのですが、パイプを介してこれを行います。私の C++ プログラムは次のようになります。
対応する python 関数 plot.py は次のようになります。
今私の問題は、データが Python 関数に渡される前に、C++ 関数からのデータのバッファリングがあるように見えることです。これを取り除くことはできません。解決策を探しましたが、見つけることができませんでした。私が見つけた最良の提案は、c++ 関数で setvbuf を使用することだったので、次の行を c++ 関数に含めようとしました。
しかし、それは何の効果もありませんでした。
C++ 関数から python にバッファなしでデータを渡す方法を知っている人はいますか?
java - 他のプロセスの**バッファリングされていない**出力ストリームの読み取り
Javaでファイルコンバーター用の小さなGUIをプログラミングしています。ファイル コンバーターは、現在の進行状況を stdout に書き込みます。次のようになります。
Flow_1.wav: 28% complete, ratio=0,447
これを進行状況バーで説明したかったので、プロセスの stdout を次のように読んでいます。
問題は、選択したバイト配列サイズに関係なく、ストリームが 4 KB のチャンクで読み取られることです。したがって、私のコードは実行されるまで実行されlength = stream.read(b);
、その後かなりの時間ブロックされます。プロセスが 4 KB の出力データを生成すると、私のプログラムはこのチャンクを取得し、32 バイトのスライスで処理します。そして、次の 4 KB を再び待ちます。
私はJavaに次のような小さなバッファを強制的に使用させようとしました:
またはこれ:
しかし、どちらも何も変わりませんでした。
次に、これを見つけました:プロセスソース(87行目あたり)
Process クラスは、プロセスの stdout をファイルにパイプするような方法で実装されているようです。つまり、proc.getInputStream();
実際に行うことは、ストリームをファイルに返すことです。そして、このファイルは4KBのバッファで書かれているようです。
この状況の回避策を知っている人はいますか?プロセスの出力をすぐに取得したいだけです。
EDIT : Ian Roberts が示唆したように、コンバーターの出力を stderr ストリームにパイプしようとしました。このストリームはBufferedInputStream
. それでも4kチャンク。
もう 1 つの興味深い点は、実際には正確に 4096 バイトではなく、約 5 バイト多いことです。FileInputStream
それ自体がネイティブにバッファリングされているのではないかと心配しています。
node.js - 個別のstdoutストリームとstderrストリームを使用してインタラクティブに子プロセスを生成するNode.js
次のCプログラム(test.c)について考えてみます。
これは、行をstdoutに、行をstderrに出力し、ユーザー入力を待ってから、別の行をstdoutに、別の行をstderrに出力する必要があります。とても基本的です!コンパイルしてコマンドラインで実行すると、プログラムの出力が完了します(getchar()のユーザー入力を受け取ります)。
次のコードでnodejsを使用して、このプログラムを子プロセスとして生成しようとした場合:
出力は次のようになります。
ターミナルで./testを実行したときに見られる出力とは大きく異なります。これは、nodejsによって生成されたときに./testプログラムがインタラクティブシェルで実行されていないためです。test.c stdoutストリームはバッファリングされ、\ nに到達するとすぐにターミナルで実行されるとバッファがフラッシュされますが、ノードでこの方法で生成された場合、バッファはフラッシュされません。これは、印刷のたびにstdoutをフラッシュするか、stdoutストリームをバッファなしに変更して、すべてをすぐにフラッシュすることで解決できます。test.cソースが利用できない、または変更できないと仮定すると、前述の2つのフラッシュオプションのどちらも実装できません。
次に、インタラクティブシェルのエミュレートを検討し始めました。たとえば、次のように、適切に機能するpty.js(疑似端末)があります。
どの出力:
ただし、stdoutとstderrの両方がマージされ(ターミナルでプログラムを実行しているときにわかるように)、ストリームからデータを分離する方法を考えることはできません。
だから質問..
test.cコードを変更せずに./testを実行したときに見られるような出力を達成するためにnodejsを使用する方法はありますか?ターミナルエミュレーションまたはプロセススポーンまたはその他の方法のいずれかによって?
乾杯!