php_stream_seek() は stream
の内部位置を移動します。
新しい位置は、offset
の値を、
whence
で示された位置に加算することで決定されます。
whence
が SEEK_SET にセット
されていた場合は、ストリームの開始位置を、SEEK_CUR
の場合は、ストリームの現在位置を、SEEK_END の場合は、
ストリームの終端位置を、それぞれ計算の基準とします。
php_stream_seek() は成功時に 0 を、失敗時に -1 を 返します。
注意: すべての種類のストリームがシーク動作をサポートしているわけでは ありませんが、ストリーム API は、
whence
SEEK_CUR に設定されていて、かつoffset
が正の値の場合、 php_stream_read() でoffset
バイト分だけ読み込んで、読み込まれた内容を破棄することで、シークを エミュレートしようとします。エミュレーションは、下層にあるストリームの実装が、シークをサポート していないときのみに行われます。つまり、仮に開かれているストリームが ファイルベースのストリームで、それがシークできないパイプを ラップしていたとしても、ストリーム API はエミュレーションを行いません。 ファイルベースのストリームはシーク動作を実装しているからです。 このとき、シークは失敗し、エラーが呼び出し元に返されます。