linux中getmntent setmntent endmntent 用法例子
2024-09-02 21:15:00
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 */
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结构中,例子如下:
- #include <mntent.h>
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
- int main()
- {
- struct mntent *m;
- FILE *f = NULL;
- f = setmntent("/etc/fstab","r"); //open file for describing the mounted filesystems
- if(!f)
- printf("error:%s\n",strerror(errno));
- while ((m = getmntent(f))) //read next line
- printf("Drive %s, name %s,type %s,opt %s\n", m->mnt_dir, m->mnt_fsname,m->mnt_type,m->mnt_opts );
- endmntent(f); //close file for describing the mounted filesystems
- return 0;
- }
值得注意的是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指向的文件追加最后一行数据。
最新文章
- mac上运行appium提示错误Encountered internal error running command 解决办法
- Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
- HTML5播放器实例
- thinkphp 模板里a标签 href 带参数的 使用U函数方法
- 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)
- Ruby中文乱码问题
- 本地jar上传到本地仓库
- 项目部署到Tomcat报错
- 在VCS仿真器中使用FSDB[转载]
- Linux云计算工程师
- 这是一个新的开始at this very monment
- C++的初始化成员列表
- NFC应用于公交卡
- 使用ajax方法实现form表单的提交
- XGBoost介绍
- aspectj ----- 简介
- HDU_3193_Find the hotel
- 素数对猜想之python3实现
- “凯易迅Calix”实习上机——求元音开头辅音结尾的子串
- 《AngularJS学习整理》系列分享专栏
热门文章
- mysql主从复制 master和slave配置的参数大全
- 洛谷 P2053 [SCOI2007]修车 解题报告
- Codeforces 906B. Seating of Students(构造+DFS)
- 链接错误 multiply defined (by misc_1.o and misc.o).
- 转--snmp如何被tr069替代
- Qt ------ 控件布局 setSizePolicy
- SpringBoot (六) :如何优雅的使用 mybatis
- Install Terraform on Windows, Linux and Mac OS
- Java设计模式の模版方法模式
- git相关网址