fd seekable - ファイル内を移動する方法2012年01月21日 11時49分40秒

FreeBSD のメーリングリストから。「easy way to determine if a stream or fd is seekable」で初めまるスレッドで結構長い。libarchive での経験も含めて言及されていたので、UNIX 全般に当てはめられる手法みたいだ。

結論は以下の通り。


1) if the file argument is a fifo, pipe or socket   --  goto 4)
2) if the file argument is a tape drive		    --  goto 4)
3) for all other cases try fseeko(), if that fails  --  goto 4)

4) use getchar()

ファイルが、fifo、pipe、socket なら即 getchar()。ファイルがテープドライブなら同じく getchar()。それ以外なら、fseeko() を試して、失敗したら getchar()。