【Linux】程序内获取文件系统挂载信息

Linux shell可通过查看/etc/mtab或者/proc/mounts文件来获取当前文件系统挂载信息,示例:

程序内读取/etc/mtab或者/proc/mounts,解析字符串较为繁琐,可以使用mntent提供的方便函数:

FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *filep);
int endmntent(FILE *filep);

(1)setmntent用来打开/etc/mtab或者同样格式的table文件

参数 filename为table文件的路径(例如/etc/mtab),参数type为打开文件的模式(与open类型,例如“r”为只读打开)

成功时,返回FILE指针(用于mntent操作),失败时返回NULL

(2)getmntent用来读取文件的每一行,解析每一行的参数到mntent结构,mntent结构的存储空间是静态分配的(不需要free),结构的值会在下一次getmntent时被覆盖

mntent结构定义: 

struct mntent
  {
    char *mnt_fsname;           /* 文件系统对应的设备路径或者服务器地址  */
    char *mnt_dir;              /* 文件系统挂载到的系统路径 */
    char *mnt_type;             /* 文件系统类型: ufs, nfs, 等  */
    char *mnt_opts;             /* 文件系统挂载参数,以逗号分隔  */
    int mnt_freq;               /* 文件系统备份频率(以天为单位)  */
    int mnt_passno;             /* 开机fsck的顺序,如果为0,不会进行check */
  }; 

  参数filep是setmntent返回的FILE指针

  成功时返回指向mntent的指针,错误时返回NULL

(3)endmntent用来关闭打开的table文件,总是返回1

示例程序:

#include <stdio.h>
#include <mntent.h>
#include <errno.h>
#include <string.h>

int main(void)
{
        char *filename = "/proc/mounts";
        FILE *mntfile;
        struct mntent *mntent;

        mntfile = setmntent(filename, "r");
        if (!mntfile) {
                printf("Failed to read mtab file, error [%s]\n",
                                strerror(errno));
                return -1;
        }  

        while(mntent = getmntent(mntfile))
                printf("%s, %s, %s, %s\n",
                                mntent->mnt_dir,
                                mntent->mnt_fsname,
                                mntent->mnt_type,
                                mntent->mnt_opts);

        endmntent(mntfile);
        return 0;
}

时间: 2024-08-01 08:01:22

【Linux】程序内获取文件系统挂载信息的相关文章

python装饰器内获取函数有用信息方法

装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc__或__name_的时候得到的是,装饰器内部函数的注释信息和名字.因为函数名被替换了. 所以想得到实际的内容,需要引用一个模块,from functools import wraps,并在装饰器函数内部再加一个@wraps的形式改变,得到实际想得到的信息. 作用是在函数加上装饰器后让能够得到真正原来

【iOS】程序中获取应用的信息

iOS应用中,经常使用到一些程序自身的参数设定,故记录一笔. 1 //Build号 2 NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 3 //Version号 4 NSString *shortVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundl

Linux C 语言 获取系统时间信息

比如获取当前年份:        /* 获取当前系统时间 暂时不使用        int iyear = 0;        int sysyear = 0;        time_t now;        struct tm *timenow;        time(&now);        timenow = localtime(&now);        sysyear = timenow->tm_year+1900;        */linux下获取系统时间的方法

Linux 系统磁盘挂载信息文件

设置文件系统挂载信息的文件(etc/fstab),使得开机能够自动挂载磁盘分区 文件系统挂载 方法一: 直接挂在,临时生效 # 格式化系统(没有格式化就没有文件系统,放不了数据) dd if=/dev/zero of=/dev/sdb1 bs=4096 count=10 --创建一个虚拟的块设备--文件系统 mkfs.ext4 /dev/sdb1 --格式化 mount -t ext4 -o loop,noexec,noatime /dev/sdb1 /mnt --挂载 df -h 查看入口 方

android获取apk签名信息

因为工作需要,需要获取应用的apk传递给新浪微博或者微信去申请授权 所以需要程序内获取签名上传服务器 做法如下: public static String getAPPSecretString(Activity activity){ String backString=""; try { PackageInfo mPackageInfo=activity.getPackageManager().getPackageInfo(GlobalConfig.APP_PACKAGE_NAME,

程序内执行shell命令自动获取局域网内所有在线IP和开放端口(Linux)

前言 题目说的有点长,其实就是以下几件事,第一是让Shell命令可以在程序内执行,然后将执行结果传递给变量,从而可以进行后续的事务处理,第二是使用nmap命令获取当前局域网内所有在线IP和开放的端口,最后就是对nmap获得的结果进行处理,得到只有IP和端口的结果. Linux命令行的强大功能相信使用Linux的人都知道,一个命令等于你在windows用几百行甚至上千行的代码量才能实现,所以,如果很好的利用shell命令,可以说是事半功倍. 而要充分利用shell的结果,必然是需要获得可以处理的命

Linux内核和根文件系统引导加载程序

续博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令.就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也能够分为两个阶段,但针对压缩了的内核如uImage就要包含内核自解压过程了.本文以linux-2.6.37版源代码为例分三个阶段来描写叙述内核启动全过程. 第一阶段为内核自解压过程.第二阶段主要工作是设置ARM处理器工作模式.使能MMU.设置一级页表等.而第三阶段则主要为

Linux学习汇总——Linux程序管理,终端类型及命令获取帮助方式

本章Blog相关Linux知识点 计算机=硬件+软件 . 冯诺依曼理论,五大部件:CPU -- 运算器.控制器, 存储器,输入设备,输出设备. Shell 环境配置通过环境变量进行配置的 ,环境变量保存对应用程序的配置,在当前进程有效 .若长期有效,需保存到配置文件中. 语言分类: 解释型语言--写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件:编译型语言:解释性语言在运行程序的时候才翻译,效率比较低.两种方式只是翻译的时间不同 程序与进程的关系: 程序运行--进程启动

Linux学习汇总——Linux程序管理,终端类型及获取命令帮助方式

本章Blog相关Linux知识点 计算机=硬件+软件 . 冯诺依曼理论,五大部件:CPU -- 运算器.控制器, 存储器,输入设备,输出设备. Shell 环境配置通过环境变量进行配置的 ,环境变量保存对应用程序的配置,在当前进程有效 .若长期有效,需保存到配置文件中. 语言分类: 解释型语言--写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件:编译型语言:解释性语言在运行程序的时候才翻译,效率比较低.两种方式只是翻译的时间不同 程序与进程的关系: 程序运行--进程启动