Project

General

Profile

Actions

Feature #9772

closed

IO#statfs and File::Statfs

Added by naruse (Yui NARUSE) over 8 years ago. Updated over 8 years ago.

Status:
Rejected
Priority:
Normal
Target version:
-
[ruby-dev:48121]

Description

IO#statfs and File::Statfs を追加しませんか。
(テストで statfs.f_type が必要だったのでとりあえず追加してしまっていますが)

statfs(2) は Unix 系 OS でそこそこ普及している、あるパスが属するファイルシステムについての情報を得るためのシステムコールです。
OS によって多少差がありますが、だいたい以下の様な情報が得られます。

 struct statfs {
 uint32_t f_type;                /* type of filesystem */
 uint64_t f_bsize;               /* filesystem fragment size */
 uint64_t f_blocks;              /* total data blocks in filesystem */
 uint64_t f_bfree;               /* free blocks in filesystem */
 int64_t  f_bavail;              /* free blocks avail to non-superuser */
 uint64_t f_files;               /* total file nodes in filesystem */
 int64_t  f_ffree;               /* free nodes avail to non-superuser */
 char      f_fstypename[MFSNAMELEN]; /* filesystem type name */
 };

f_type の値が OS 依存だったり、Linux 以外だとそもそもどれがどの値かきちんと定義されていないとか
ツッコミどころの多い API ではあるのですが、他では得られない情報が得られます。

たとえば、以前から CRuby で使われている用途としては、あるファイルの乗っているファイルシステムが、
HFS+ かどうかがわかります。言い換えると、ファイル名が正規化されているかどうかがわかります。
ありがちな反論として、書き込めば正規化されるかわかるだろうというのがありえますが、
目当てのファイルと同じディレクトリに書き込めるとは限りません。
違うディレクトリだと別のファイルシステムがマウントされている可能性があります。

なお今回の用途は、SEEK_DATA/SEEK_HOLEができるか否かを、実際にやってみる以外の方法で知りたかった、というものです。
(Rubyのテストなのにやってみて調べるではテストにあまりならない)


Related issues 2 (0 open2 closed)

Related to Ruby master - Bug #9788: TestFile#test_statfs = Bad System Call on Solaris Closed04/30/2014Actions
Related to Ruby master - Bug #9789: Error in TestIO#test_seek_symwhence and TestIO#test_seek on systems without File::Statfs#type (e.g. Solaris)Closedngoto (Naohisa Goto)04/30/2014Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0