home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume2
/
bdf
< prev
next >
Wrap
Internet Message Format
|
1991-08-07
|
4KB
From: paul@vixie.UUCP (Paul Vixie Esq)
Newsgroups: comp.sources.misc
Subject: v02i014: A Berkeley-style DF System V
Message-ID: <7126@ncoast.UUCP>
Date: 26 Jan 88 03:48:30 GMT
Approved: allbery@ncoast.UUCP
Comp.sources.misc: Volume 2, Issue 15
Submitted-By: Paul Vixie Esq <paul@vixie.UUCP>
Archive-Name: bdf
[Someone remind me to post "space" -- better than Berzerk df, and doesn't
have to parse someone else's grotty output. ++bsa]
/* bdf - berkeley DF for system-V systems
* vix 16jan88 [written - from scratch]
*
* This code is public-domain, but please leave this notice intact and give me
* appropriate credit if you write a man page for it. If you send me bug fixes
* and enhancements, I will release new versions from time to time.
* Paul Vixie, paul%vixie@uunet.uu.net
*
* This is not nearly good enough for the obfuscated C contest. Next time?
*
* Known to work on INTERACTIVE 386/ix, and should therefore work perfectly
* on Microport/386 and whatever the AT&T 6386 calls its OS. Should work okay
* on 3B's. Should work, in fact, anywhere where the output of 'df -t' is
* the same as 'System V/386', which may or may not be all SysV.[23] systems.
*/
#include <stdio.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
static char *PROGNAME = "bdf";
static void usage() {
fprintf(stderr, "usage: %s [-i]\n", PROGNAME);
exit(4);
}
main(argc, argv)
int argc;
char *argv[];
{
void bdf();
int iflag = FALSE;
int optind = argc;
char command_buf[300], *ptr = command_buf;
if (!(PROGNAME = strrchr(argv[0], '/'))) PROGNAME = argv[0];
if (argc > 1)
if (argv[1][0] == '-')
if (argv[1][1] == 'i') { iflag = TRUE; optind = 2; }
else usage();
else optind = 1;
ptr += sprintf(ptr, "/bin/df -t");
for (; optind < argc; optind++)
ptr += sprintf(ptr, " %s", argv[optind]);
bdf(iflag, command_buf);
}
static void
bdf(iflag, df_command)
int iflag;
char *df_command;
{
void output_part1(), output_part2(), output_part3();
void header_part1(), header_part2(), header_part3();
char filesys[50], device[50];
int fblocks, finodes, tblocks, tinodes;
FILE *df;
if (!(df = popen(df_command, "r"))) {
fprintf(stderr, "error executing <%s> command\n", df_command);
perror("popen");
exit(2);
}
header_part1();
if (iflag) header_part2();
header_part3();
while (EOF != fscanf(df, "%s (%s ): %d blocks %d i-nodes",
filesys, device, &fblocks, &finodes)) {
if (EOF == fscanf(df, " total: %d blocks %d i-nodes",
&tblocks, &tinodes)) {
perror("fscanf#2");
exit(2);
}
output_part1(device, fblocks/2, tblocks/2);
if (iflag)
output_part2(finodes, tinodes);
output_part3(filesys);
}
}
/*************
Filesystem kbytes used avail capacity iused ifree %iused Mounted on
/dev/dsk/0s1 xxxxxxx xxxxxxx xxxxxxx xxx% xxxxxx xxxxxx xxx% /foo/bar
*************/
static void
header_part1() {
printf("Filesystem kbytes used avail capacity");
}
static void
header_part2() {
printf(" iused ifree %%iused");
}
static void
header_part3() {
printf(" Mounted on\n");
}
static void
output_part1(device, free_kb, total_kb)
char *device;
int free_kb, total_kb;
{
int used_kb = total_kb - free_kb;
int capacity = (100 * used_kb) / total_kb;
printf("%12s %7d %7d %7d %3d%% ",
device, total_kb, used_kb, free_kb, capacity);
}
static void
output_part2(free_inodes, total_inodes)
int free_inodes, total_inodes;
{
int used_inodes = total_inodes - free_inodes;
int percent_used = (100 * used_inodes) / total_inodes;
printf("%6d %6d %3d%% ", used_inodes, free_inodes, percent_used);
}
static void
output_part3(filesys)
char *filesys;
{
printf(" %s\n", filesys);
}
--
Paul A Vixie Esq
paul%vixie@uunet.uu.net
{uunet,ptsfa,hoptoad}!vixie!paul
San Francisco, (415) 647-7023