のようにreadline()
のように機能します。readline()のような行単位で読み込みファイルを実装するには
最初に私はread(fd, buf, 4096);
のようなファイルを読まなければなりません。buf[i]
をif (buf[i] == '\n')
のようにバイト単位で比較しなければなりません。
したがって、対応するi
が見つかった場合は、lseek()
を使用して最初のファイルオフセットに移動してから、もう一度read(fd, buf, i)
に移動します。このような操作を行った後、もう一度readline()
コールがこのメカニズムを再び実行します。
私はこの解決策を最初に考えましたが、buf[i]
(バイト単位で比較することを意味します)を比較すると、fd
のすべての文字を読み取るには遅すぎます。私はこれと同じように比較しなければならないのですか?
なぜfget/fgetsを使用しないのですか? – inzanez
行ごとに読み込まれます。しかし、私はread()を使って解を知りたい。 fgetsやその他の標準I/O関数は、最終的にread()、write()システムコールを使用するためです。 – allen
ちょっとしたアイデア: 'readline'ソースコードを閲覧して、どうやって見ているのか見ることができます。 – Siguza