mntent 结构是在 <mntent.h> 中定义,如下:

              struct mntent {
                      char    *mnt_fsname;    /* name of mounted file system */
                      char    *mnt_dir;       /* file system path prefix */
                      char    *mnt_type;      /* mount type (see mntent.h) */
                      char    *mnt_opts;      /* mount options (see mntent.h) */
                      int     mnt_freq;       /* dump frequency in days */
                      int     mnt_passno;     /* pass number on parallel fsck */

};

该结构可以对应/etc/mtab或者/etc/fstab中的每一行的数据,如果是程序有需求要访问/etc/mtab或者/etc/fstab文件,那么使用linux自带的函数getmntent就可以直接获取一行的数据,很方便。setmntent可以根据参数指定的文件及打开类型来创建一个FD,该FD可以传入getmntent函数来获取一行的数据存入mntent结构中,例子如下:

  1. #include <mntent.h>
  2. #include <stdio.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. int main()
  6. {
  7. struct mntent *m;
  8. FILE *f = NULL;
  9. f = setmntent("/etc/fstab","r"); //open file for describing the mounted filesystems
  10. if(!f)
  11. printf("error:%s\n",strerror(errno));
  12. while ((m = getmntent(f)))        //read next line
  13. printf("Drive %s, name %s,type  %s,opt  %s\n", m->mnt_dir, m->mnt_fsname,m->mnt_type,m->mnt_opts );
  14. endmntent(f);   //close file for describing the mounted filesystems
  15. return 0;
  16. }

值得注意的是getmntent是不可重入函数,如果一个程序中多个地方同时调用getmntent,可能会得不到想要的结果,那么可以用getmntent_r函数来替代, 原型如下:

struct mntent *getmntent_r(FILE *fp, struct mntent *mntbuf, char *buf, int buflen);

getmntent_r会把数据存放在用户提供的内存中(mntbuf),而不是由系统管理。

addmntent(FILE *fp, const struct mntent *mnt) 可以在fp指向的文件追加最后一行数据。

linux中getmntent setmntent endmntent 用法例子的更多相关文章

  1. Linux中yum和apt-get用法及区别

    Linux中yum和apt-get用法及区别   一般来说著名的linux系统基本上分两大类:   1.RedHat系列:Redhat.Centos.Fedora等   2.Debian系列:Debi ...

  2. Linux中find命令的用法汇总

    Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm

  3. linux中memset的正确用法

    linux中memset的正确用法 [起因]希望对各种类型的数组进行初始化,避免野值 [函数头文件] 提示:在linux中可以在terminal中输入 "man memset"进行 ...

  4. Linux中的crontab命令用法

    Crontab 在linux中,crontab的用来设置定期执行指定的命令,我们可以用它来指定一些需要重复的事情,Linux系统的用户只需将想要定期要执行的命令序列加到crontab文件中,操作系统即 ...

  5. linux中grep命令的用法

    作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的. 首先谈一下grep命令的常用格式为:[grep  [选项]  "模式"  [ ...

  6. linux中find命令高级用法

    前言 在<Linux中的文件查找技巧>一文中,我们已经知道了文件查找的基本方法,今天我们介绍find命令的一些高级使用技巧.它能满足我们一些更加复杂的需求. 查找空文件或空目录 有时候需要 ...

  7. linux中的ps命令用法。

    在linux中使用ps命令可以查看有哪些进程在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. ps命令最常用的是用于监控后台进程的工作情况. 名称:ps 使用权限:所有 ...

  8. linux中top命令的用法

    收集了两篇关于介绍Linux中监控命令top命令的详细使用方法的文章.总的来说,top命令主要用来查看Linux系统的各个进程和系统资源占用情况,在监控Linux系统性能方面top显得非常有用,下面就 ...

  9. linux中ps命令的用法说明

      在linux中使用ps命令可以查看有哪些进程在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. ps命令最常用的是用于监控后台进程的工作情况. 名称:ps  www. ...

随机推荐

  1. 【洛谷】CYJian的水题大赛【第二弹】解题报告

    点此进入比赛 T1: JerryC Loves Driving 第一题应该就是一道水分题(然而我只水了130分),我的主要做法就是暴力模拟,再做一些小小的优化(蠢得我自己都不想说了). My Code ...

  2. poll() 与 select()比较

    比较poll() 与select() 尽管poll()和select()所做的是相同的工作,不过poll()优于select(),原因:    1.poll()不需要用户计算并传递作为参数的最高编号的 ...

  3. Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

    关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...

  4. 洛谷 P4319 变化的道路 解题报告

    P4319 变化的道路 题目描述 小 w 和小 c 在 H 国,近年来,随着 H 国的发展,H 国的道路也在不断变化着 根据 H 国的道路法,H 国道路都有一个值 \(w\),表示如果小 w 和小 c ...

  5. Hystrix : 解决请求会被拒绝和抛出异常并且fallback不会被调用的问题

    启动脚本增加参数:-Dserver.tomcat.max-http-header-size=102400 增大Hystrix,ribbon的各项参数; hystrix: threadpool: def ...

  6. 解题:SCOI 2014 方伯伯运椰子

    题面 很有趣的一道题,看起来是个神奇网络流,其实我们只要知道网络的一些性质就可以做这道题了 因为题目要求流量守恒,所以我们其实是在网络中搬运流量,最终使得总费用减小,具体来说我们可以直接把这种“搬运” ...

  7. WIFI Direct(Wi-Fi P2P)

    Wi-Fi Direct技术是Wi-Fi产业链向蓝牙技术发起的挑战,它试图完全取代蓝牙 Wi-Fi Direct是一种点对点连接技术,它可以在两台station之间直接建立tcp/ip链接,并不需要A ...

  8. CF832 D LCA倍增 裸

    有询问$a,b,c$,求a到c路径上,同时是a到b路径的点的个数.其中询问中的a,b,c可任意选择作为起点或终点,求一组询问中最大值. LCA用于计算树上点对间距离,对于一组询问求深度最大的点作为起点 ...

  9. 怎样用javascript关闭本窗口

    大家都知道window.close()是用来关闭窗口的,而且ie和firefox都是支持的. 为了实现用户对浏览器的绝对控制,ie中用close关闭非open打开的窗口时回弹出一个对话框询问用户,怎么 ...

  10. json格式的一些常用操作方法

    package com.liveyc.restfull.until; import java.util.HashMap; import java.util.Iterator; import java. ...