Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!elroy.jpl.nasa.gov!swrinde!cs.utexas.edu!uunet!sparky!kent From: wht@n4hgf.Mt-Park.GA.US (Warren Tucker) Newsgroups: comp.sources.misc Subject: v18i081: df2 - an alternate S5R3 df utility, Part01/01 Message-ID: <1991Apr23.015218.8166@sparky.IMD.Sterling.COM> Date: 23 Apr 91 01:52:18 GMT Sender: kent@sparky.IMD.Sterling.COM (Kent Landfield) Organization: Sterling Software, IMD Lines: 179 Approved: kent@sparky.imd.sterling.com X-Checksum-Snefru: 3c942a34 1683df75 c1a73fb7 f627f006 Submitted-by: Warren Tucker Posting-number: Volume 18, Issue 81 Archive-name: df2/part01 This is df2, an alternate df-like utility for System V. It needs mnttab.h and sys/statfs.h, so it probably will only work for S5R3. I've never used ustat() but it may be an alternate way to getting it going under earlier OSes. Simple to compile: cc -O -o df2 df2.c make df2 (if you are in a directory with no [Mm]akefile) Simple to use: no options, just say df2 Sample output: Size (kb) Inodes Filesystem|Mount Dir | Total Free Used Used| Total Free Used Used ----------+-------------+----------------------------+------------------------- /dev/root |/ | 279559 122432 157127 56%| 65488 52903 12585 19% /dev/u |/u/spool/news| 19642 18272 1370 6%| 4992 4672 320 6% /dev/v0 |/c | 63137 41227 21910 34%| 15776 15190 586 3% /dev/v1 |/u4 | 63137 43170 19967 31%| 15776 14502 1274 8% /dev/v2 |/u5 | 63137 29194 33943 53%| 15776 12723 3053 19% /dev/v3 |/v3 | 63137 62138 999 1%| 15776 15773 3 0% /dev/v4 |/u7 | 63137 1783 61354 97%| 15776 15362 414 2% ----------+-------------+----------------------------+------------------------- |total | 614886 318216 296670 48%|149360 131125 18235 12% Warren ---- #!/bin/sh # This is df2, a shell archive (shar 3.46) # made 04/16/1991 21:13 UTC by wht@n4hgf # Source directory /t # # existing files will NOT be overwritten unless -c is specified # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 2872 -rw-r--r-- df2.c # # ============= df2.c ============== if test -f 'df2.c' -a X"$1" != X"-c"; then echo 'x - skipping df2.c (File already exists)' else echo 'x - extracting df2.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'df2.c' && X/* CHK=0x254C */ X/*+------------------------------------------------------------------------- X df2.c - another df-like utility X wht@n4hgf.Mt-Park.GA.US X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:04-07-1991-02:58-wht@n4hgf-creation */ X X#include X#include X#include X#include X#include X#include X#include X Xextern int errno; Xextern char *sys_errlist[]; X Xchar *heading[] = X{ X" Size (kb) Inodes ", X"Filesystem|Mount Dir | Total Free Used Used| Total Free Used Used", X(char *)0 X}; X Xchar *sep = X"----------+-------------+----------------------------+-------------------------"; X X/*+------------------------------------------------------------------------- X main(argc,argv) X--------------------------------------------------------------------------*/ Xmain(argc,argv) Xint argc; Xchar **argv; X{ Xchar **cpptr = heading; Xchar *etc_mnttab = "/etc/mnttab"; XFILE *fpmt; Xstruct mnttab mnttab_buf; Xstruct mnttab *mt = &mnttab_buf; Xstruct statfs statf_buf; Xstruct statfs *fs = &statf_buf; X Xlong kb_size; Xlong kb_free; Xlong kb_used; Xint kb_used_pct; Xlong kb_size_total = 0; Xlong kb_free_total = 0; Xlong kb_used_total = 0; X Xlong ino_size; Xlong ino_free; Xlong ino_used; Xint ino_used_pct; Xlong ino_size_total = 0; Xlong ino_free_total = 0; Xlong ino_used_total = 0; X X if(!(fpmt = fopen(etc_mnttab,"r"))) X { X perror(etc_mnttab); X exit(1); X } X X while(*cpptr) X printf("%s\n",*cpptr++); X printf("%s\n",sep); X X while(fread((char *)mt,1,sizeof(*mt),fpmt) == sizeof(*mt)) X { X if(statfs(mt->mt_filsys,fs,sizeof(*fs),0)) X { X printf("%-10.10s statfs: %s\n",mt->mt_dev,sys_errlist[errno]); X continue; X } X X kb_size = fs->f_blocks / 2L; X kb_free = fs->f_bfree / 2L; X kb_used = kb_size - kb_free; X kb_used_pct = (kb_used * 100) / kb_size; X X ino_size = fs->f_files; X ino_free = fs->f_ffree; X ino_used = ino_size - ino_free; X ino_used_pct = (ino_used * 100) / ino_size; X X printf("%-10.10s|%-13.13s|%7ld %7ld %7ld %3d%%|%6ld %6ld %6ld %3d%%\n", X mt->mt_dev,mt->mt_filsys, X kb_size,kb_free,kb_used,kb_used_pct, X ino_size,ino_free,ino_used,ino_used_pct); X X kb_size_total += kb_size; X kb_free_total += kb_free; X kb_used_total += kb_used; X X ino_size_total += ino_size; X ino_free_total += ino_free; X ino_used_total += ino_used; X } X X kb_used_pct = (int)(kb_used_total * 100 / kb_size_total); X ino_used_pct = (int)(ino_used_total * 100L / (long)ino_size_total); X X printf("%s\n",sep); X printf("%-10.10s|%-13.13s|%7ld %7ld %7ld %3d%%|%6ld %6ld %6ld %3d%%\n", X "","total", X kb_size_total,kb_free_total,kb_used_total,kb_used_pct, X ino_size_total,ino_free_total,ino_used_total,ino_used_pct); X X exit(0); X} /* end of main */ X X/* vi: set tabstop=4 shiftwidth=4: */ X/* end of df2.c */ SHAR_EOF chmod 0644 df2.c || echo 'restore of df2.c failed' Wc_c="`wc -c < 'df2.c'`" test 2872 -eq "$Wc_c" || echo 'df2.c: original size 2872, current size' "$Wc_c" fi exit 0 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.