#include #include #include #include #include #include #include #include #include #include main (int argc, char **argv) { char special[MAXPATHLEN]; struct dqblk q; struct fs_disk_quota f; FILE *mnt; struct mntent *mp; struct stat s,t; struct ustat ubuf; struct statfs buf; if ( -1 == ( stat(argv[1], &s))) { perror("stat"); exit(1); } if ( NULL == ( mnt = setmntent("/etc/mtab","r"))) { perror("setmntent"); } else { while ( mp = getmntent(mnt)) { if ( -1 == ( stat(mp->mnt_dir,&t))) continue; if (t.st_dev == s.st_dev) break; } endmntent( mnt ); if (t.st_dev != s.st_dev) { exit(1); } printf("%s\t%s\n", mp->mnt_fsname, "file system name"); printf("%s\t%s\n", mp->mnt_dir, "file system path prefix"); printf("%s\t%s\n", mp->mnt_type, "type: dbg, efs, nfs"); printf("%s\t%s\n", mp->mnt_opts, "options: ro, hide, etc."); printf("%d\t%s\n", mp->mnt_freq, "dump frequency, in days"); printf("%d\t%s\n", mp->mnt_passno, "pass number on parallel fsck"); if ( -1 == statfs(argv[1], &buf, sizeof (struct statfs), 0)) perror("statfs"); printf("%d\t%s\n",buf.f_fstyp, "File system type"); printf("%d\t%s\n",buf.f_bsize, "Block size"); printf("%d\t%s\n",buf.f_frsize, "Fragment size"); printf("%ld\t%s\n",buf.f_blocks, "Total number of blocks"); printf("%ld\t%s\n",buf.f_bfree, "Count of free blocks"); printf("%ld\t%s\n",buf.f_files, "Total number of file nodes"); printf("%ld\t%s\n",buf.f_ffree, "Count of free file nodes"); printf("%s\t%s\n",buf.f_fname, "Volume name"); printf("%s\t%s\n",buf.f_fpack, "Pack name"); } if ( -1 == ustat( s.st_dev, &ubuf)) perror("ustat"); printf("%ld\t%s\n",ubuf.f_tfree, "Total free blocks"); printf("%ld\t%s\n",ubuf.f_tinode, "Number of free inodes"); printf("%s\t%s\n",ubuf.f_fname,"Filsys name"); printf("%s\t%s\n",ubuf.f_fpack, "Filsys pack name"); }