9

ディレクトリ(すべてのサブフォルダを含む)のサイズを「du -s somepath」とほぼ同等にするPOSIX関数はありますか?

4

3 に答える 3

28
$ man nftw

名前

ftwnftw-ファイルツリーウォーク

説明

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およびです。readdirclosedirstat

于 2009-01-23T12:26:19.330 に答える