ディレクトリ(すべてのサブフォルダを含む)のサイズを「du -s somepath
」とほぼ同等にするPOSIX関数はありますか?
therefromhere
質問する
17337 次
3 に答える
28
$ man nftw
名前
ftw
、nftw
-ファイルツリーウォーク説明
ftw()
ディレクトリdirpathの下にあるディレクトリツリーをウォークスルーしfn()
、ツリー内のエントリごとに1回呼び出します。デフォルトでは、ディレクトリは、ディレクトリに含まれるファイルとサブディレクトリの前に処理されます(プレオーダートラバーサル)。準拠
POSIX.1-2001、SVr4、SUSv1。
簡単な例
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned int total = 0;
int sum(const char *fpath, const struct stat *sb, int typeflag) {
total += sb->st_size;
return 0;
}
int main(int argc, char **argv) {
if (!argv[1] || access(argv[1], R_OK)) {
return 1;
}
if (ftw(argv[1], &sum, 1)) {
perror("ftw");
return 2;
}
printf("%s: %u\n", argv[1], total);
return 0;
}
于 2009-01-23T12:35:34.910 に答える
2
既製の機能はありませんので、自分で作る必要があります。例として、duのGNU実装のソースコードを見ることができます(ダウンロードする場所のリストについては、http://www.gnu.org/prep/ftp.htmlを参照してください)。coreutils
パッケージに入っています。
重要なPosix呼び出しは、おそらく、、、、opendir
およびです。readdir
closedir
stat
于 2009-01-23T12:26:19.330 に答える