#include #include #include #include #include #include #include #define TRIALS 10 #define SIZE 65536 void create_file(void) { char buf[SIZE]={0}; char *p; int fd; char *filename; ssize_t ntowrite, nwritten; if((filename = mktemp("/tmp/statvfs_test_XXXXXXX")) == NULL) { err(1, "mktemp failed"); } if((fd = open(filename, O_CREAT|O_WRONLY)) < 0) { err(1, "open failed"); } ntowrite = SIZE; p = &buf[0]; while(ntowrite > 0) { if((nwritten = write(fd, p, ntowrite)) < 0) { err(1, "write failed"); } p += nwritten; ntowrite -= nwritten; } } int main(int argc, char *argv[]) { struct statvfs stats; unsigned long f_bsize, f_bsize_new; unsigned long f_frsize, f_frsize_new; fsblkcnt_t f_blocks, f_blocks_new; fsblkcnt_t f_bfree, f_bfree_new; fsblkcnt_t f_bavail, f_bavail_new; fsfilcnt_t f_files, f_files_new; fsfilcnt_t f_ffree, f_ffree_new; fsfilcnt_t f_favail, f_favail_new; unsigned long f_fsid, f_fsid_new; unsigned long f_flag, f_flag_new; unsigned long f_namemax, f_namemax_new; int i; printf("Test 55 "); for(i = 0; i < TRIALS; i++) { if(statvfs("/tmp", &stats) < 0) { perror("statvfs failed"); return 1; } f_bsize = stats.f_bsize ; f_frsize = stats.f_frsize ; f_blocks = stats.f_blocks ; f_bfree = stats.f_bfree ; f_bavail = stats.f_bavail ; f_files = stats.f_files ; f_ffree = stats.f_ffree ; f_favail = stats.f_favail ; f_fsid = stats.f_fsid ; f_flag = stats.f_flag ; f_namemax = stats.f_namemax; create_file(); if(statvfs("/tmp", &stats) < 0) { perror("statvfs failed"); return 1; } f_bsize_new = stats.f_bsize ; f_frsize_new = stats.f_frsize ; f_blocks_new = stats.f_blocks ; f_bfree_new = stats.f_bfree ; f_bavail_new = stats.f_bavail ; f_files_new = stats.f_files ; f_ffree_new = stats.f_ffree ; f_favail_new = stats.f_favail ; f_fsid_new = stats.f_fsid ; f_flag_new = stats.f_flag ; f_namemax_new = stats.f_namemax; if ((f_bsize == f_bsize_new) && (f_frsize == f_frsize_new) && (f_blocks == f_blocks_new) && (f_bfree > f_bfree_new) && (f_bavail > f_bavail_new) && (f_files == f_files_new) && (f_ffree == f_ffree_new + 1) && (f_favail == f_favail_new + 1) && (f_fsid == f_fsid_new) && (f_flag == f_flag_new) && (f_namemax == f_namemax_new) ) { printf("ok\n"); return 0; } } return 1; }