home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume18 / df2 / part01 next >
Internet Message Format  |  1991-04-23  |  6KB

  1. From: wht@n4hgf.Mt-Park.GA.US (Warren Tucker)
  2. Newsgroups: comp.sources.misc
  3. Subject: v18i081:  df2 - an alternate S5R3 df utility, Part01/01
  4. Message-ID: <1991Apr23.015218.8166@sparky.IMD.Sterling.COM>
  5. Date: 23 Apr 91 01:52:18 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 3c942a34 1683df75 c1a73fb7 f627f006
  8.  
  9. Submitted-by: Warren Tucker <wht@n4hgf.Mt-Park.GA.US>
  10. Posting-number: Volume 18, Issue 81
  11. Archive-name: df2/part01
  12.  
  13. This is df2, an alternate df-like utility for System V.
  14. It needs mnttab.h and sys/statfs.h, so it probably will only
  15. work for S5R3.  I've never used ustat() but it may be an
  16. alternate way to getting it going under earlier OSes.
  17.  
  18. Simple to compile:  cc -O -o df2 df2.c
  19.              make df2 (if you are in a directory with no [Mm]akefile)
  20. Simple to use: no options, just say
  21.                df2
  22.  
  23. Sample output:
  24.                                     Size (kb)                  Inodes        
  25.  Filesystem|Mount Dir    | Total   Free    Used   Used| Total  Free  Used   Used
  26.  ----------+-------------+----------------------------+-------------------------
  27.  /dev/root |/            | 279559  122432  157127  56%| 65488  52903  12585  19%
  28.  /dev/u    |/u/spool/news|  19642   18272    1370   6%|  4992   4672    320   6%
  29.  /dev/v0   |/c           |  63137   41227   21910  34%| 15776  15190    586   3%
  30.  /dev/v1   |/u4          |  63137   43170   19967  31%| 15776  14502   1274   8%
  31.  /dev/v2   |/u5          |  63137   29194   33943  53%| 15776  12723   3053  19%
  32.  /dev/v3   |/v3          |  63137   62138     999   1%| 15776  15773      3   0%
  33.  /dev/v4   |/u7          |  63137    1783   61354  97%| 15776  15362    414   2%
  34.  ----------+-------------+----------------------------+-------------------------
  35.            |total        | 614886  318216  296670  48%|149360 131125  18235  12%
  36.  
  37. Warren
  38. ----
  39. #!/bin/sh
  40. # This is df2, a shell archive (shar 3.46)
  41. # made 04/16/1991 21:13 UTC by wht@n4hgf
  42. # Source directory /t
  43. #
  44. # existing files will NOT be overwritten unless -c is specified
  45. #
  46. # This shar contains:
  47. # length  mode       name
  48. # ------ ---------- ------------------------------------------
  49. #   2872 -rw-r--r-- df2.c
  50. #
  51. # ============= df2.c ==============
  52. if test -f 'df2.c' -a X"$1" != X"-c"; then
  53.     echo 'x - skipping df2.c (File already exists)'
  54. else
  55. echo 'x - extracting df2.c (Text)'
  56. sed 's/^X//' << 'SHAR_EOF' > 'df2.c' &&
  57. X/* CHK=0x254C */
  58. X/*+-------------------------------------------------------------------------
  59. X    df2.c - another df-like utility
  60. X    wht@n4hgf.Mt-Park.GA.US
  61. X--------------------------------------------------------------------------*/
  62. X/*+:EDITS:*/
  63. X/*:04-07-1991-02:58-wht@n4hgf-creation */
  64. X
  65. X#include <stdio.h>
  66. X#include <ctype.h>
  67. X#include <sys/errno.h>
  68. X#include <sys/types.h>
  69. X#include <sys/stat.h>
  70. X#include <sys/statfs.h>
  71. X#include <mnttab.h>
  72. X
  73. Xextern int errno;
  74. Xextern char *sys_errlist[];
  75. X
  76. Xchar *heading[] =
  77. X{
  78. X"                                   Size (kb)                  Inodes        ",
  79. X"Filesystem|Mount Dir    | Total   Free    Used   Used| Total  Free  Used   Used",
  80. X(char *)0
  81. X};
  82. X
  83. Xchar *sep =
  84. X"----------+-------------+----------------------------+-------------------------";
  85. X
  86. X/*+-------------------------------------------------------------------------
  87. X    main(argc,argv)
  88. X--------------------------------------------------------------------------*/
  89. Xmain(argc,argv)
  90. Xint argc;
  91. Xchar **argv;
  92. X{
  93. Xchar **cpptr = heading;
  94. Xchar *etc_mnttab = "/etc/mnttab";
  95. XFILE *fpmt;
  96. Xstruct mnttab mnttab_buf;
  97. Xstruct mnttab *mt = &mnttab_buf;
  98. Xstruct statfs statf_buf;
  99. Xstruct statfs *fs = &statf_buf;
  100. X
  101. Xlong kb_size;
  102. Xlong kb_free;
  103. Xlong kb_used;
  104. Xint kb_used_pct;
  105. Xlong kb_size_total = 0;
  106. Xlong kb_free_total = 0;
  107. Xlong kb_used_total = 0;
  108. X
  109. Xlong ino_size;
  110. Xlong ino_free;
  111. Xlong ino_used;
  112. Xint ino_used_pct;
  113. Xlong ino_size_total = 0;
  114. Xlong ino_free_total = 0;
  115. Xlong ino_used_total = 0;
  116. X
  117. X    if(!(fpmt = fopen(etc_mnttab,"r")))
  118. X    {
  119. X        perror(etc_mnttab);
  120. X        exit(1);
  121. X    }
  122. X
  123. X    while(*cpptr)
  124. X        printf("%s\n",*cpptr++);
  125. X    printf("%s\n",sep);
  126. X
  127. X    while(fread((char *)mt,1,sizeof(*mt),fpmt) == sizeof(*mt))
  128. X    {
  129. X        if(statfs(mt->mt_filsys,fs,sizeof(*fs),0))
  130. X        {
  131. X            printf("%-10.10s statfs: %s\n",mt->mt_dev,sys_errlist[errno]);
  132. X            continue;
  133. X        }
  134. X
  135. X        kb_size = fs->f_blocks  / 2L;
  136. X        kb_free = fs->f_bfree / 2L;
  137. X        kb_used = kb_size - kb_free;
  138. X        kb_used_pct = (kb_used * 100) / kb_size;
  139. X
  140. X        ino_size = fs->f_files;
  141. X        ino_free = fs->f_ffree;
  142. X        ino_used = ino_size - ino_free;
  143. X        ino_used_pct = (ino_used * 100) / ino_size;
  144. X
  145. X        printf("%-10.10s|%-13.13s|%7ld %7ld %7ld %3d%%|%6ld %6ld %6ld %3d%%\n",
  146. X            mt->mt_dev,mt->mt_filsys,
  147. X            kb_size,kb_free,kb_used,kb_used_pct,
  148. X            ino_size,ino_free,ino_used,ino_used_pct);
  149. X
  150. X        kb_size_total  += kb_size;
  151. X        kb_free_total  += kb_free;
  152. X        kb_used_total  += kb_used;
  153. X
  154. X        ino_size_total  += ino_size;
  155. X        ino_free_total  += ino_free;
  156. X        ino_used_total  += ino_used;
  157. X    }
  158. X
  159. X    kb_used_pct = (int)(kb_used_total * 100 / kb_size_total);
  160. X    ino_used_pct = (int)(ino_used_total * 100L / (long)ino_size_total);
  161. X
  162. X    printf("%s\n",sep);
  163. X    printf("%-10.10s|%-13.13s|%7ld %7ld %7ld %3d%%|%6ld %6ld %6ld %3d%%\n",
  164. X        "","total",
  165. X        kb_size_total,kb_free_total,kb_used_total,kb_used_pct,
  166. X        ino_size_total,ino_free_total,ino_used_total,ino_used_pct);
  167. X
  168. X    exit(0);
  169. X}    /* end of main */
  170. X
  171. X/* vi: set tabstop=4 shiftwidth=4: */
  172. X/* end of df2.c */
  173. SHAR_EOF
  174. chmod 0644 df2.c ||
  175. echo 'restore of df2.c failed'
  176. Wc_c="`wc -c < 'df2.c'`"
  177. test 2872 -eq "$Wc_c" ||
  178.     echo 'df2.c: original size 2872, current size' "$Wc_c"
  179. fi
  180. exit 0
  181.  
  182. exit 0 # Just in case...
  183. -- 
  184. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  185. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  186. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  187. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  188.