Is there a POSIX function that will give me the size of a directory (including all sub-folders), roughly equivalent to "du -s somepath
"?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
$ man nftw
NAME
ftw
,nftw
- file tree walkDESCRIPTION
ftw()
walks through the directory tree that is located under the directory dirpath, and callsfn()
once for each entry in the tree. By default, directories are handled before the files and subdirectories they contain (pre-order traversal).CONFORMING TO
POSIX.1-2001, SVr4, SUSv1.
Simple example
#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;
}
回答2:
There is no ready-made function, so you will have to make your own. You may look at the source code of the GNU implemenation of du as an example (see http://www.gnu.org/prep/ftp.html for a list of places to download from). It is in the coreutils
package.
The crucial Posix calls are probably opendir
, readdir
, closedir
, and stat
.
回答3:
Result in bytes:
du -sb | grep -oE '^\s*[0-9]+'