Is there a function (or interface; ioctl, netlink etc) in the standard Linux libs that will return the current mounts directly from the kernel without parsing /proc? strace
ing the mount command, it looks like it parses files in /proc

- 18,105
- 14
- 62
- 98
-
http://stackoverflow.com/questions/5095976/mount-system-call – Satish Feb 14 '12 at 17:14
-
1@Satish that mounts a filesystem- it does not return _current mounts_ – tMC Feb 14 '12 at 18:25
-
4Why do you want to avoid `/proc/` ?? under linux, it is the preferred way to retrieve such information! And it is very simple too!! – Basile Starynkevitch Feb 14 '12 at 21:38
2 Answers
Please see the clarification at the bottom of the answer for the reasoning being used in this answer.
Is there any reason that you would not use the getmntent
libc library call? I do realize that it's not the same as an 'all in one' system call, but it should allow you to get the relevant information.
#include <stdio.h>
#include <stdlib.h>
#include <mntent.h>
int main(void)
{
struct mntent *ent;
FILE *aFile;
aFile = setmntent("/proc/mounts", "r");
if (aFile == NULL) {
perror("setmntent");
exit(1);
}
while (NULL != (ent = getmntent(aFile))) {
printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir);
}
endmntent(aFile);
}
Clarification
Considering that the OP clarified about trying to do this without having /proc
mounted, I'm going to clarify:
There is no facility outside of
/proc
for getting the fully qualified list of mounted file systems from the linux kernel. There is no system call, there is no ioctl. The/proc
interface is the agreed upon interface.
With that said, if you don't have /proc
mounted, you will have to parse the /etc/mtab
file - pass in /etc/mtab
instead of /proc/mounts
to the initial setmntent
call.
It is an agreed upon protocol that the mount
and unmount
commands will maintain a list of currently mounted filesystems in the file /etc/mtab. This is detailed in almost all linux/unix/bsd manual pages for these commands. So if you don't have /proc
you can sort of rely on the contents of this file. It's not guaranteed to be a source of truth, but conventions are conventions for these things.
So, if you don't have /proc
, you would use /etc/mtab
in the getmntent
libc library call below to get the list of file systems; otherwise you could use one of /proc/mounts
or /proc/self/mountinfo
(which is recommended nowadays over /proc/mounts
).

- 91,618
- 3
- 107
- 122
-
I have an embedded system that could have made use of this info during boot; before /proc was mounted. – tMC Feb 15 '12 at 14:46
-
1Both `df` and `mount` use `/proc/self/mountinfo` instead of `/proc/mounts`, but result is the same. – Ivan Black Feb 27 '16 at 19:58
-
2Keep in mind that `getmntent` is not thread safe. There is `getmntent_r` (GNU extension). – Ivan Black Feb 28 '16 at 11:04
-
2Yes, well aware of all the limitations of the entire API cluster of *ent calls. Reading from the per process mountinfo file is now preferred. – Anya Shenanigans Feb 28 '16 at 11:10
There is no syscall to list this information; instead, you can find it in the file /etc/mtab

- 321,842
- 108
- 597
- 820
-
-
2@tMC: `/proc/mounts` is an implementation detail. `/etc/mtab` is a standard file which you will find on almost any Unix-like system. I didn't check but I think it's part of the standard. So you can rely on it. And I wouldn't say "on most system". In my Ubuntu and OpenSuSE systems, it's a plain file. I do have `/proc/mounts` but it's a link :-) – Aaron Digulla Oct 21 '14 at 09:08
-
I can confirm that `/etc/mtab` is not a file but a link to `/proc/mounts` on Raspbian Jessie. – Zimano May 04 '17 at 08:32