問題タブ [fread]

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.

0 投票する
1 に答える
2744 参照

php - iPhoneプッシュ通知-エラー応答の問題

プッシュ通知を送信した後、応答エラーをチェックするときに問題が発生しました。これが私の設定です:

PHPサーバーから、プッシュ通知を送信しています。これらの通知は拡張形式で送信されるため、Appleサーバーからエラー応答を受け取ることができます。例:エラー#7「無効なペイロードサイズ」。

エラーをチェックする方法は、ソケットの応答を読み取ることです。

これは、実際のエラーがある場合に正常に機能します。私の問題は、エラーがない場合、「fread」呼び出しは何も返さず、永久にロードし続けるということです。

誰かがこれを手伝ってくれますか?ご協力いただきありがとうございます!

0 投票する
1 に答える
2751 参照

c - パイプに基づいて記述子から読み取るfread()は、データがないEOFではなくエラーを設定します

パイプの読み取り端からのものをfread()で読み取る必要があります。

しかし、パイプに何もないときにfread()がEOFを設定することを期待していますが、代わりにエラーインジケーターを設定します。posixとCの標準を確認しましたが、手がかりは見つかりませんでした。おそらく私は意図しないことをしている(読んで、ばかげている)、そうです:)

抜粋は次のとおりです。

0 投票する
2 に答える
16267 参照

c - C: fgetc() の代わりに fread()/fgets() を使用してテキスト ファイル (可変長行を含む) を 1 行ずつ読み取る (ブロック I/O と文字 I/O)

(キャラクターI/ O)の代わりに(ブロックI/O)をgetline使う機能はありますか?freadfgetc

を介してファイルを文字単位で読み取ると、パフォーマンスが低下しますfgetcfreadパフォーマンスを向上させるために、 の内部ループでブロック読み取り経由を使用できると考えていますgetline。ただし、これにより、行末を超えて読み取るという望ましくない影響が生じる可能性があります。少なくとも、これにはgetline、ファイルの「未読」部分を追跡するための の実装が必要です。これには、ANSI C FILE セマンティクスを超えた抽象化が必要です。これは私たちが自分たちで実装したいものではありません!

アプリケーションのプロファイリングを行いましたが、パフォーマンスの低下は、大きなファイルを 1 文字ずつ消費しているという事実に起因していますfgetc。残りのオーバーヘッドは、比較すると実際には取るに足らないコストです。ファイルのすべての行を最初から最後まで常に順番に読み取り、読み取り中はファイル全体をロックできます。これにより、おそらくfreadベースのgetline実装が容易になります。

では、(キャラクターI/ O)の代わりに(ブロックI/O)をgetline使う機能は存在するのでしょうか?そうなっていると確信していますが、そうでない場合、どのように実装すればよいのでしょうか?freadfgetc

更新Paul Hsieh による便利な記事、 Handling User Input in Cを見つけました。これは にfgetc基づくアプローチですが、代替案について興味深い議論があります (最初に がいかに悪いかgets、次に について議論fgetsます)。

一方、C プログラマー (経験者と見なされている人でも) からの一般的な反論は、代わりにfgets()を使用する必要があるというものです。もちろん、それ自体では、fgets()は実際にはユーザー入力自体を処理しません。奇妙な文字列終了条件 (\n または EOF に遭遇したとき、\0 に遭遇したとき) があることに加えて、バッファーが容量に達したときに終了するために選択されたメカニズムは、単純にfgets()操作を突然停止し、\0 で終了することです。したがって、ユーザー入力が事前に割り当てられたバッファーの長さを超える場合、fgets()部分的な結果を返します。この問題に対処するには、プログラマーにはいくつかの選択肢があります。1) 単純に切り捨てられたユーザー入力を処理します (入力を提供している間、入力が切り捨てられたことをユーザーにフィードバックする方法はありません) 2) 拡張可能な文字配列をシミュレートし、fgets()への連続呼び出しで入力します。 . 最初の解決策は、ほとんどの場合、可変長のユーザー入力に対して非常に貧弱な解決策です。これは、多くの通常のケースをキャプチャしようとするため、ほとんどの場合、バッファーが必然的に大きくなりすぎ、異常なケースでは小さすぎるためです。2 番目の解決策は、正しく実装するのが複雑になることを除けば問題ありません。どちらも'\0' に関するfgets の奇妙な動作を扱いません。

読者に残された演習: fgets()への呼び出しによって実際に読み取られたバイト数を決定するために、'\n' をスキャンするのと同じように、'\0' をスキップしてみてください。fgets()に渡されるサイズを超えない。ストリームの最後の行でこれが不十分な理由を説明してください。ftell() のどの弱点が、この問題に完全に対処するのを妨げていますか?

演習は読者にお任せします: fgets( )への呼び出しごとにゼロ以外の値でバッファ全体を上書きすることにより、 fgets()によって消費されるデータの長さを決定する問題を解決してください。

そのため、fgets()では、多くのコードを記述し、C ライブラリの残りの部分と矛盾する行終了条件に対処するか、任意のカットオフを設定するかを選択する必要があります。これで十分でない場合、何が残されるのでしょうか? scanf()は、分離できない方法で解析と読み取りを混合し、fread()は文字列の末尾を超えて読み取ります。要するに、C ライブラリには何も残されていません。fgetc()の上に直接基づいて独自にロールすることを余儀なくされています。それでは、試してみましょう。

それで、にgetline基づくfgets(そして入力を切り捨てない)関数は存在しますか?

0 投票する
1 に答える
1095 参照

c - バイナリファイルを読み取ってパイプ内に保存する方法

以下のコードを使用して、バイナリファイルfp(ファイルには保存された2D配列が含まれています)を開き、パイプ内に配置しました。

これはパイプの中に入れるためのコードですか?

配列の合計を作成したい場合、どうすれば作成できますか?

0 投票する
1 に答える
8100 参照

c++ - float 配列をバイナリ ファイルに保存して読み戻す際の問題 (C++)

float 値の配列をファイルに書き込んで読み戻そうとしています。
配列から直接書き込もうとしましたが、読み返すと長さが 153 を超える配列で問題が発生し続けます。コード例では、わかりやすくするために各 float 値を 1 つずつ書き込みます。

インデックスが 153 以上の値の場合、値は 153.0 になり、153.0、154.0、155.0、... となるはずです。

このコードが機能しないのはなぜですか?

ありがとう、デイブ

0 投票する
3 に答える
1842 参照

c++ - fwrite、fread - fread の問題

私は次のコードを持っています:

読み取り時にクラッシュし、2 番目の質問では、整数、浮動小数点数、および char* 配列などを保持する構造があると仮定して、構造全体をファイルに簡単に書き込むにはどうすればよいでしょうか? sizeof 構造体を使用した通常の fwrite が機能しない

0 投票する
1 に答える
1007 参照

c++ - PNGヘッダーの最初のバイトを読み取るときの奇妙な結果

PNGファイルからヘッダーを読み取ろうとしています。

結果は次のようになります

しかし、私は

私は何が間違っているのですか?

コード:

0 投票する
4 に答える
2646 参照

c - フレッドの問題

ファイルから一度に 1 バイトずつ読み取ろうとしています。

result_new0になり、エラーを出力しています。何が間違っている可能性があります。きっとpFile大丈夫です。

ありがとう

0 投票する
2 に答える
317 参照

php - PHP、fopen、ブラウザの互換性 – それは何ですか

このページhttp://www.effectivewebsolutions.biz/video-spokesmodel.htmlに URL を入力すると、fopen 関数を介して URL が開き、デモンストレーション用にビデオ スポーク モデルが Web サイトに配置されます。スクリプトは次のとおりです。

ただし、Safari では Web サイトのテキスト バージョンのみが開きます (CSS や画像はありません)。この場合、なぜブラウザが違いを生むのか意味がありません。

何か案は?

0 投票する
3 に答える
4621 参照

c - freadを適切に使用する

次の関数は機能していません。つまり、終了します。

手動でfreadをストリームのさらに下にプッシュできれば、最終的には「データ」に到達すると思います。

言い換えると、バイトをスキップするようにfreadをインクリメントするにはどうすればよいですか。

コードの例は常にありがたいです。

ありがとう!


編集1

基本的に、iPhoneでwavファイルのヘッダーを解析しています。それは私にいくつかの問題を与えています、そしてそれはアップルがそのオーディオファイルをフォーマットする方法に関係していると私は信じています。誰かが私に「データ」を取得するまでストリームを実行し、そこから先に進むことを勧めました。

これで物事が明確になることを願っています。


編集2

これはwavファイルヘッダーがどのように見えるべきかについてのドキュメントですが、アップルがそれらをフォーマットする方法がこれを不正確にするかどうか疑問に思います。

'data'が4の倍数である36だけオフセットされていることに気付くでしょう。