linux c statfs系统调用

statfs 系统调用原型:

int statfs(const char *path, struct statfs *buf);

参数说明:

path : 位于需要查询信息的文件系统的路径名(不是设备名,是挂载点名称)
buf : statfs结构体的指针变量,用于储存文件系统相关的信息。

statfs结构体说明

结构体原型:
#if __WORDSIZE == 32          /* System word size */
# define __SWORD_TYPE           int
#else /* __WORDSIZE == 64 */
# define __SWORD_TYPE         long int
#endif

struct statfs {
    __SWORD_TYPE f_type;    /* 文件系统类型 (see below) */
    __SWORD_TYPE f_bsize;   /* 经过优化的传输块大小 */
    fsblkcnt_t   f_blocks;  /* 文件系统数据块总数 */
    fsblkcnt_t   f_bfree;   /* 可用块数 */
    fsblkcnt_t   f_bavail;  /* 非超级用户可获取的块数 */
    fsfilcnt_t   f_files;   /* 文件节点总数 */
    fsfilcnt_t   f_ffree;   /* 可用文件节点总数 */
    fsid_t       f_fsid;    /* 文件系统标识 */
    __SWORD_TYPE f_namelen; /* 文件名的最大长度 */
    __SWORD_TYPE f_frsize;  /* 碎片大小 (since Linux 2.6) */
    __SWORD_TYPE f_spare[5];
};

f_type所描述的文件类型如下:
ADFS_SUPER_MAGIC      0xadf5
AFFS_SUPER_MAGIC      0xADFF
BEFS_SUPER_MAGIC      0x42465331
BFS_MAGIC             0x1BADFACE
CIFS_MAGIC_NUMBER     0xFF534D42
CODA_SUPER_MAGIC      0x73757245
COH_SUPER_MAGIC       0x012FF7B7
CRAMFS_MAGIC          0x28cd3d45
DEVFS_SUPER_MAGIC     0x1373
EFS_SUPER_MAGIC       0x00414A53
EXT_SUPER_MAGIC       0x137D
EXT2_OLD_SUPER_MAGIC  0xEF51
EXT2_SUPER_MAGIC      0xEF53
EXT3_SUPER_MAGIC      0xEF53
EXT4_SUPER_MAGIC      0xEF53
HFS_SUPER_MAGIC       0x4244
HPFS_SUPER_MAGIC      0xF995E849
HUGETLBFS_MAGIC       0x958458f6
ISOFS_SUPER_MAGIC     0x9660
JFFS2_SUPER_MAGIC     0x72b6
JFS_SUPER_MAGIC       0x3153464a
MINIX_SUPER_MAGIC     0x137F /* orig. minix */
MINIX_SUPER_MAGIC2    0x138F /* 30 char minix */
MINIX2_SUPER_MAGIC    0x2468 /* minix V2 */
MINIX2_SUPER_MAGIC2   0x2478 /* minix V2, 30 char names */
MSDOS_SUPER_MAGIC     0x4d44
NCP_SUPER_MAGIC       0x564c
NFS_SUPER_MAGIC       0x6969
NTFS_SB_MAGIC         0x5346544e
OPENPROM_SUPER_MAGIC  0x9fa1
PROC_SUPER_MAGIC      0x9fa0
QNX4_SUPER_MAGIC      0x002f
REISERFS_SUPER_MAGIC  0x52654973
ROMFS_MAGIC           0x7275
SMB_SUPER_MAGIC       0x517B
SYSV2_SUPER_MAGIC     0x012FF7B6
SYSV4_SUPER_MAGIC     0x012FF7B5
TMPFS_MAGIC           0x01021994
UDF_SUPER_MAGIC       0x15013346
UFS_MAGIC             0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
VXFS_SUPER_MAGIC      0xa501FCF5
XENIX_SUPER_MAGIC     0x012FF7B4
XFS_SUPER_MAGIC       0x58465342
_XIAFS_SUPER_MAGIC    0x012FD16D

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 11:26:31

linux c statfs系统调用的相关文章

基于int的Linux的经典系统调用实现

 先说明两个概念:中断和系统调用 一 系统调用: 是应用程序(运行库也是应用程序的一部分)与操作系统内核之间的接口,它决定了应用程序是如何和内核打交道的. 1,  Linux系统调用:2.6.19版内核提供了319个系统调用.比如 exit fork read open close …… 2,  对Windows来说,操作系统提供给应用程序的接口不是系统调用,而是API.比如:ReadFile.我们暂时把API和系统调用等同起来 3,  Linux中,每个系统调用对应一个系统调用号,内核维护了一

linux中mmap系统调用原理分析与实现

参考文章:http://blog.csdn.net/shaoguangleo/article/details/5822110 linux中mmap系统调用原理分析与实现 1.mmap系统调用(功能)      void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )      内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的

Linux内核(四)系统调用

转载请注明出处:jiq?钦's technical Blog 什么是系统调用? 系统调用--内核和用户应用程序的桥梁,中间人. 系统调用就是内核实现的一系列函数,这些函数提供了一套固定的接口,通过这套接口,用户程序可以访问系统硬件和操作系统的资源,即内核提供的服务. 为什么提供系统调用? 用户空间只能通过系统调用来访问内核提供的服务的根本原因是为了对系统进行"保护",因为我们知道Linux的运行空间分为内核空间与用户空间,它们各自运行在不同的级别中,逻辑上相互隔离.用户进程在通常情况下

向linux内核添加系统调用新老内核比较

2.6内核 1>修改linux-source-2.6.31/kernel/sys.c文件,在文件末尾添加系统响应函数.函数实现如下: asmlinkage int sys_mycall(int number) { printk("这是我添加的第一个系统调用"); return number; } 2>在linux-source-2.6.31/arch/x86/kernel/syscall_table_32.S 中添加:.long sys_mycall 如: .long sy

通过内核编译法向Linux内核添加系统调用

[实验内容]: 向Linux添加一个系统调用 测试该系统调用 使用ptrace或类似的系统跟踪工具来对该测试程序进行跟踪调试 [软件]:VMWare支持的Ubuntu虚拟机 VSCode [步骤] 1.在实验之前先下载好相关软件包 不过如果升级了make以后,如果内核版本低,会报错 1. sudo apt-get install make 2. sudo apt-get install gcc 3. sudo apt-get install libncurses5-dev 4. sudo apt

Linux之select系统调用_1

SYNOPSIS /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *

Linux下的系统调用

1.linux的的用户态与内核态 Intel x86架构的CPU有0~3四种执行级别,0级最高,3级最低,  linux只使用0级和3级,分别表示内核态和用户态.linux中,只有内核态能访问逻辑地址为0xc0000000以上的空间.执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态.程序由用户态进入内核态的方式是中断. 系统调用的核心是使用操作系统为用户特别开放的一个中断,例如linux的int 80h中断,系统中断是由用户态

[linux内核]ARM-Linux系统调用

1,系统调用的概念: 是用户空间访问内核的唯一手段,系统调用依靠软件中断实现,每个系统调用被赋予一个系统调用号,用来指明要执行哪个系统调用. 2,系统调用的实现:系统调用是通过软中端(SWI)实现的,SWI指令SWI指令的格式为:SWI{条件} 24位的立即数SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程.操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用 户程序调用系统例程的类型,相关参数通过通用寄存器传递,当指令中24位的立即数被忽略时,用户程序

linux内核增加系统调用--Beginner‘s guide

Linux内核中设置了一组用于实现系统功能的子程序,称为系统调用.系统调用和普通库函数调用非常相似明知是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态. 一般的,进程是不能访问内核的,它不能访问内核所占用内存空间也不能调用内核函数.这被称为保护模式.为了和用户空间上运行的进程进行交互,内核提供一组接口.通过该接口应用程序可以访问硬件设备和其他操作系统资源. 实际上提供这组接口主要是为了保证系统稳定可靠,避免应用程序肆意妄为. 系统调用在用户空间和硬