日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

statfs函數使用

作者:qq_27182175 更新時間: 2022-07-19 編程語言

1.功能描述編輯
查詢文件系統相關的信息

2.用法

#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);

3.參數

path: 需要查詢信息的文件系統的文件路徑名。
fd: 需要查詢信息的文件系統的文件描述詞。
buf:以下結構體的指針變量,用于儲存文件系統相關的信息
struct statfs {
long f_type; /* 文件系統類型 */
long f_bsize; /* 經過優化的傳輸塊大小,單位B*/
long f_blocks; /* 文件系統數據塊總數 */
long f_bfree; /* 可用塊數 */
long f_bavail; /* 非超級用戶可獲取的塊數 */
long f_files; /* 文件結點總數 */
long f_ffree; /* 可用文件結點數 */
fsid_t f_fsid; /* 文件系統標識 */
long f_namelen; /* 文件名的最大長度 */
};

4.返回說明

成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EACCES: (statfs())文件或路徑名中包含的目錄不可訪問
EBADF : (fstatfs()) 文件描述詞無效
EFAULT: 內存地址無效
EINTR : 操作由信號中斷
EIO : 讀寫出錯
ELOOP : (statfs())解釋路徑名過程中存在太多的符號連接
ENAMETOOLONG:(statfs()) 路徑名太長
ENOENT:(statfs()) 文件不存在
ENOMEM: 核心內存不足
ENOSYS: 文件系統不支持調用
ENOTDIR:(statfs())路徑名中當作目錄的組件并非目錄
EOVERFLOW:信息溢出

5.例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/statfs.h>

int main(int argc, char *argv[])
{
    char buf[]="/home";
    struct statfs stStatfs;
    int lSts;
    int percentage; /*已用百分比*/

    memset(&stStatfs, 0, sizeof(struct statfs));
    lSts = 0;

    lSts = statfs(buf, &stStatfs);
    if (0 != lSts)
    {
        printf("獲取失敗\n");
        goto OUT;
    }
    percentage = (stStatfs.f_blocks - stStatfs.f_bfree) * 100 /(stStatfs.f_blocks - stStatfs.f_bfree + stStatfs.f_bavail) + 1;
    printf("文件系統%20s 1k-塊%5s 已用%5s 可用  已用%%%5s 掛載點\n", "", "", "", "", "", "");
   printf("%ld %ld %ld %ld %%%d\n", stStatfs.f_type, 4*stStatfs.f_blocks, 4*(stStatfs.f_blocks - stStatfs.f_bfree), 4*stStatfs.f_bavail, percentage);
system("df /home");

OUT:
    return 0;
}

6.例:

#include <stdio.h>                                                                                                                  
#include <stdlib.h>
#include <unistd.h>
#include <sys/vfs.h>

int main()
{
    struct statfs diskInfo;  
    statfs("/", &diskInfo);  
    unsigned long long totalBlocks = diskInfo.f_bsize;  
    unsigned long long totalSize = totalBlocks * diskInfo.f_blocks;  
    size_t mbTotalsize = totalSize>>20;  
    unsigned long long freeDisk = diskInfo.f_bfree*totalBlocks;  
    size_t mbFreedisk = freeDisk>>20;  
    printf ("/  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);  

    statfs("/boot", &diskInfo);  
    totalBlocks = diskInfo.f_bsize;  
    totalSize = totalBlocks * diskInfo.f_blocks;  
    mbTotalsize = totalSize>>20;  
    freeDisk = diskInfo.f_bfree*totalBlocks;  
    mbFreedisk = freeDisk>>20;  
    printf ("/boot  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);
    statfs("/dev/shm", &diskInfo);
    totalBlocks = diskInfo.f_bsize;
    totalSize = totalBlocks * diskInfo.f_blocks;
    mbTotalsize = totalSize>>20;
    freeDisk = diskInfo.f_bfree*totalBlocks;
    mbFreedisk = freeDisk>>20;
    printf ("/dev/shm  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);
}

原文鏈接:https://blog.csdn.net/qq_27182175/article/details/125849873

欄目分類
最近更新