2016-11-30 6 views
1

CのreadPythonはCのread関数と同じものは何ですか?

リード()関数は、バッファがbufが指すに、開いているファイル記述子、fildesに対応するファイルからnbyteバイトを読み取るしようとしなければなりません。

これらの関数は正常終了時に、のバイト数を示す負でない整数を返します。実際にはとなります。さもなければ、関数は-1を返し、エラーを示すためにerrnoをセットする。ストリームから最大n文字で

読む:

Pythonのread

n個の文字があるか、ヒットEOFになるまで、下位のバッファから読み込みます。 nが負または省略されている場合は、EOFまで読み取ります。

太字は鉱山です。基本的に、Pythonは、currrently availableデータがバッファサイズよりも小さい場合にEOFを見つけることを主張します。

+0

'file.read(1024)'は 'n'文字を返します.nは1024文字までの文字数です。必要なものを再現可能な例でクリアすることはできますか? –

+0

@RafaelBarrosこれは、通常のファイルなどの非ブロッキングリソースから読み取る場合にのみ該当します。ソケットやパイプから読み込むとき、Cの 'read()'は*いくつかの*データが利用可能になるまで待ってからデータを返します。 Pythonの 'file.read'はCの' fread() 'と同様に、エラーやEOFに遭遇しなければ、要求されたすべてのデータを返そうとします。 – user4815162342

+0

C言語に 'read'はありません。引用しているものは、お使いのOSが提供するAPIのマニュアルです。そのようなAPIは通常、Cのバインドを持っていますが、幸いなことにPythonの場合もあります。 'posix.read'や' os.read'を見たいと思っています。 –

答えて

3

"Pythonのread"とは、readのメソッドfileのオブジェクトを意味します。この方法は、Cのfreadに精通しています。バッファリングを実装し、IOエラーまたはファイルの終わりの条件のために不可能でない限り、要求された量を満たそうとします。

多くのC環境で実際にread()関数を呼び出す必要がある場合は、os.read()を呼び出して、基礎となるC関数を呼び出すことができます。唯一の違いは、読み込まれたデータをバイト文字列として返し、C関数が-1を返す場合に例外が発生することです。

あなたがos.read()を呼び出した場合、またos.open()との通話を混在しないように覚えているなどos.openos.pipe、としてosモジュールでそれを関数でファイルオブジェクトにfileno方法を用いて得られた、または返されたファイル記述子を与えることを忘れないでください後者はバッファリングを行い、後でos.open()を呼び出すと、バッファされたデータが返されない可能性があるため、file.open()です。

+0

それだけです。実際には 'os.read'と書かなければなりません。残りは分かります。十分な睡眠を取らないと、男は奇妙な疑問を浮かべます。どうもありがとうございました。 – Cyker

+0

ところで、 'os.read'はPython 3で' bytes'を返すようになっています。 – Cyker

+0

@Cykerありがとう、私は今、Python 2では 'str'(バイト文字列)を参照し、Python 3では' bytes'を参照するように "byte string"と訂正しました。 – user4815162342

関連する問題