問題タブ [stdio]
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 バッファを解放するのは誰ですか?
そのため、libc の stdio 部分がどのように実装されているかを調べていて、別の質問に出くわしました。見るとman setvbuf
、次のように見えます。
ファイルに対して最初の I/O 操作が発生すると、malloc(3) が呼び出され、バッファが取得されます。
これは理にかなっていmalloc
ます。実際に使用しない限り、プログラムに I/O 用の を含めるべきではありません。これに対する私の直感的な反応は、libc がここで独自の混乱を解消するということです。これは、valgrind がメモリ リークを報告していないためだと思います (もちろん、何か汚いことをして、malloc
直接割り当てないこともできます... しかし、今のところ文字通り使用していると仮定しますmalloc
)。
ただし、独自のバッファも指定できます...
いやいや、メモリリーク!valgrind はそれを確認します。そのため、stdio が独自にバッファーを割り当てるたびに、自動的に削除されるようです (遅くともプログラムの終了時ですが、おそらくストリームの終了時)。ただし、バッファーを明示的に指定する場合は、自分でクリーンアップする必要があります。
ただし、キャッチがあります。マニュアルページには次のようにも書かれています:
ストリームが閉じられるまでに buf が指す領域がまだ存在していることを確認する必要があります。これは、プログラムの終了時にも発生します。たとえば、次は無効です。
現在、これは標準ストリームにとって興味深いものになっています。それらはプログラムの終了時に閉じられるため、手動で割り当てられたバッファーをどのように適切にクリーンアップしますか? ファイル構造内で「フラグを閉じるときにこれをクリーンアップする」ことを想像できますが、これを正しく読むと次のようなことを行うため、毛むくじゃらになります。
次の文のために、標準ライブラリによって 2 つの割り当てが発生します。
引数 buf が NULL の場合、モードのみが影響を受けます。次の読み取りまたは書き込み操作で新しいバッファが割り当てられます。
編集:私の質問への補遺。free
に渡すバッファが必要であることは明らかなのでsetvbuf
、実際に使用する場合stdout
、実用的な方法はありますfree
か? プログラムの終了まで存続する必要があります。私が考えることができる最善の方法はfclose(stdout)
、一部の人が言及したように、それを解放するか、静的バッファーを使用することです。それは厄介な設計上の決定のように思えるので、私は尋ねます.
c - Cファイルの読み取りは文字化けを残す
ファイルの内容をプログラムに読み込もうとしていますが、バッファの最後に文字化けが発生することがあります。私は C をあまり使用していません (むしろ C++ を使用しています) が、ストリームと関係があると思います。私は本当に何をすべきかわかりません。MinGWを使用しています。
コードは次のとおりです(これにより、2回目の読み取りの最後にゴミが表示されます):
filetobuf 関数は、この例http://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_%28C_/_SDL%29からのものです。私には正しいように思えますが。
とにかく、それはどうですか?
c - \n区切られたファイルから文字列を読み取る方法
戻り区切りファイルを読み込もうとしています。フレーズだらけ。
各フレーズを文字列に入れようとしています。
問題は、ファイルを次のように読み込もうとすると、
文字列には1つの単語しか含まれていません。スペースにぶつかると、文字列の読み取りを停止します
c++ - Boostのフォーマットライブラリを使用してiostreamを置き換えることはできますか?
<iostream>
C++ライブラリで使用するのは好きではありません。の「printf」や「scanf」に似たものを使用することを好み<stdio.h>
ます。
Boostのフォーマットライブラリを使用して<iostream>
、すべてのC ++プログラムを置き換えることはできますか?
c - isdigit() および isalpha() コマンドを使用する最も簡単な方法は何ですか?
isdigit()
2 つのコマンドとがどのように機能するかについて簡単に説明する必要がありますisalpha()
。もちろん、質問する前にオンラインのソースを読みましたが、試してみましたが、うまくいきませんでした。それらを使用する最も簡単な方法は何ですか?
私はそれが値を返すことを知っているので、次のように使用できると仮定しています:
あれは正しいですか?どんなキャラにも使えますか?そして、それを浮動小数点数または配列と比較できますか?
数字と文字を含むテキスト ファイルをスキャンして、何をスキャンしているかを判断したいとします。このコンテキストでこれら 2 つのコマンドを使用できますか?
java - に類似したJavaライブラリ/パッケージはありますか?
私は約 14 年間 Java のオンとオフを行ってきましたが、過去 6 年間はほとんど何もしていませんでした。
私は本当に java.io パッケージが嫌いです -- サブクラスとアダプタの軍団です。私は常に「errno」などをポーリングするよりも例外が好きですが、宣言された例外がなくても確実に生活できます。
C の Unix/ANSI stdio.h ルーチンのように機能するものはありますか?
Java 自体が廃止されるまで、java.io とその規則を取り除くことは決してないことを私は知っています。そうは言っても、次のように機能するものが欲しいです(パッケージjavax.stdioと呼びましょう):
fopen() および popen() を模倣するコンストラクターを使用して、テキストまたはバイナリーのファイル (またはパイプ) をシーケンシャルまたはランダムに読み書きできるメインのユーティリティ クラス (おそらく FileStar) を用意します。
このクラスには、fread()、fwrite()、fgets()、fputs()、fseek() など (fprintf()?) などを実行する便利なメソッドが多数含まれている必要があります。オープン/コンストラクト モードと互換性のないメソッドは、単純にスローされます (制限されているときに一部のコレクション クラス/メソッドが行うのと同じように)。
次に、作成したストリームをどのように使用するかを示す一連のインターフェイスを用意します: Sequential、RandomAccess、ReadOnly、WriteOnly、Text、Binary、およびこれらの適切な組み合わせ。おそらく、適切な型キャスト (インターフェース) を返すメソッドがあり、互換性のないものを要求した場合はスローされます。
追加のフレーバーについては、宣言された例外をスキップします。たとえば、javax.stdio.IOException extends RuntimeException です。
このようなオープンソース プロジェクトはありますか?
iphone - iPhoneで標準出力をキャプチャする方法は?(開発目的)
iPhoneの標準I/Oをキャプチャする方法は?
公開目的ではなく、私的な開発目的のため。私はある種の不規則なことを試みています。
元)
- ネットワークストリーム入力をiPhoneコンソールと画面の両方に印刷します。
- コンソール出力をネットワークストリームにリダイレクトします。
- NSLog出力を自分のプログラムにリダイレクトします。
- ... (もっと)
c - Different standard streams per POSIX thread
Is there any possibility to achieve different redirections for standard output like printf(3) for different POSIX thread? What about standard input?
I have lot of code based on standard input/output and I only can separate this code into different POSIX thread, not process. Linux operation system, C standard library. I know I can refactor code to replace printf() to fprintf() and further in this style. But in this case I need to provide some kind of context which old code doesn't have.
So doesn't anybody have better idea (look into code below)?
java - Java + Eclipse: stdout と stderr の同期
私はエクリプスを使用しています。次のようなアプリケーションがある場合:
出力は何度も次のようになります。
これら 2 つの出力ストリームを同期する方法はありますか? もちろん、20回のブロック後に数ミリ秒待たずにHello World
、印刷後に数ミリ秒待ちますERROR
。