3

ファイル記述子を使用してファイルから読み取りたい。割り当て規則のため、その名前を使用できません。

電話openして取得しましたが、正常に動作します。read()この時点で、関数を読み取るには関数を使用する必要があることがわかりました。私の問題は、read()関数が引数として読み取るバイト数を必要とし、毎回ファイルから行全体を読み取りたいため、読み取るバイト数がわからないことです。

たとえばfscanf()を使用すると、単純な文字列で問題なく動作し、必要に応じて行全体を取り戻します。だから私の質問は:

fscanf()ファイルポインタではなくファイル記述子で呼び出すことができるような関数はありますか?

4

2 に答える 2

4

「使用する必要がある」と言うときread()、それがファイル記述子を与えられた状況を理解しているのopen()か、それともある種の割り当てに対する制限があるのか​​ どうかはわかりません。

ファイルディスクリプタはあるが、 と のほうが使いやすい場合はfscanf()、 を使用して fd からfdopen()取得し、FILE *stdio の使用に進みます。

内部的には、バッファ内のような関数を使用read()してから、それらのバッファをfscanf()友達と一緒に読みながら処理します。

于 2012-11-23T00:14:21.023 に答える
2

行全体を読み取るまで一度に 1 文字ずつ読み取り、'/n' を検出することができます。これは宿題なので、書きません。

ただし、注意すべき点がいくつかあります。

  1. EOF を確認する必要があります。そうしないと、無限ループに陥る可能性があります。
  2. 文字を読み取るバッファを宣言し、それをバッファにコピーする必要があります。あなたの入力内容がわからないので、サイズを提案することはできませんが、宿題には [256] で十分でしょう。
  3. バッファーの長さを超えたとしても、バッファーがいっぱいにならないようにする必要があります。
  4. 「/n」文字が見つかるまで読み続けてください。次に、作成したラインを処理し、次のラインを開始します。
于 2012-11-23T00:14:29.307 に答える