2012-03-15 11 views
2

私はstatvfsのようないくつかの呼び出しを実行するために、perlからlinuxと直接インターフェースしたいと思います。コアperlパッケージ(追加のモジュールなし)でこれを行う方法があるのであれば、私は興味があります。Perl "import os" Python equivelant?

特に、dfがインストールされていないサーバーのディスク使用情報を取得したいと考えています。

答えて

2

Perlを持つシステムを見て、まだ持っているが、ではありません。コアperlパッケージ(追加のモジュールなし)でこれを行う方法があるのであれば、私は興味があります。

技術的、おそらく非常に有用ではない、あなたの質問への答えはイエス、確かにに、statvfsはちょうどコアPerlやモジュールなしで何を行う方法が存在しないということです。それは次のように機能します。

my $statfs_buffer = "\0" x length(pack($STATFS_TEMPLATE,())); 
my $retval = syscall($SYS_statfs, $some_filename, $statfs_buffer); 
if ($retval == -1) { 
    die "statfs failed: $!"; 
} 
my($f_type, $f_bsize, $f_blocks, $f_bfree, 
    $f_bavail, $f_files, $f_ffree, 
    $f_fsid, $f_namelen) = unpack($STATFS_TEMPLATE, $statfs_buffer); 

問題は、あなたが$SYS_statfs$STATFS_TEMPLATE自分自身の値を把握する必要がありますです。前者は容易で後者は難しくない。

ただし、一部のシステムでは、statfs64の亜種を使用する必要があります。

はい、それは可能ですあなたが十分に決定されている場合は、あなたが望むことを行うことができます。しかし、それを行うためのより良い方法があります。

+0

SYS_statfsを取得するには 'sys/syscall.ph'が必要です – MkV

+0

@MkV確かに、確かに。しかし、それは常に機能しません。 – tchrist

+0

@tchristこれらの変数のどちらかの値を決定するにはどうすればよいですか?システムをシステムに変更するか?それとも、オペレーティングシステム/アーキテクチャ(またはそのようなもの)に関係していますか? – GoldenNewby

3

use POSIX;が気になります。 statvfsは、それによって提供される機能の中にはありません。おそらくあなたはuse Filesys::Df;を探しています。

私はそのように、statvfsなど、いくつかの呼び出しを実行するために、perlのからの直接のLinuxとのインタフェースたいのcoreutils(DF)がインストール...

+2

+1 Filesys :: Df。 [df出力を解析する](http://stackoverflow.com/a/6351257)は間違いやすいです。 – daxim

+0

質問を読んでください:あなたはコアのperlではないので、 'Filesys :: Df'を使うことは許されません。 – tchrist