Detect if USB disk is mounted in C application in Linux
Clash Royale CLAN TAG#URR8PPP
I would like to check if USB disk is mounted in a C application. I know that in a script I can accomplish this via mount | grep /mnt (the mount point where udev mounts the USB drive) but I need to do this in a C application. Earlier I used to accomplish this using system("sh script.sh") but doing this is causing some serious issues as this code runs in a very time critical thread.
mount usb c real-time
add a comment |
I would like to check if USB disk is mounted in a C application. I know that in a script I can accomplish this via mount | grep /mnt (the mount point where udev mounts the USB drive) but I need to do this in a C application. Earlier I used to accomplish this using system("sh script.sh") but doing this is causing some serious issues as this code runs in a very time critical thread.
mount usb c real-time
1
you're not telling what system you're using; on Linux you have all the info you need in the/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.
– mosvy
Jan 29 at 5:05
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
1
then go on and read/proc/self/mountinfo
-- that's whatfindmnt(8)
is doing, too.
– mosvy
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09
add a comment |
I would like to check if USB disk is mounted in a C application. I know that in a script I can accomplish this via mount | grep /mnt (the mount point where udev mounts the USB drive) but I need to do this in a C application. Earlier I used to accomplish this using system("sh script.sh") but doing this is causing some serious issues as this code runs in a very time critical thread.
mount usb c real-time
I would like to check if USB disk is mounted in a C application. I know that in a script I can accomplish this via mount | grep /mnt (the mount point where udev mounts the USB drive) but I need to do this in a C application. Earlier I used to accomplish this using system("sh script.sh") but doing this is causing some serious issues as this code runs in a very time critical thread.
mount usb c real-time
mount usb c real-time
edited Jan 29 at 6:30
jsotola
13716
13716
asked Jan 29 at 4:53
OpenSourceEnthusiastOpenSourceEnthusiast
366
366
1
you're not telling what system you're using; on Linux you have all the info you need in the/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.
– mosvy
Jan 29 at 5:05
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
1
then go on and read/proc/self/mountinfo
-- that's whatfindmnt(8)
is doing, too.
– mosvy
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09
add a comment |
1
you're not telling what system you're using; on Linux you have all the info you need in the/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.
– mosvy
Jan 29 at 5:05
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
1
then go on and read/proc/self/mountinfo
-- that's whatfindmnt(8)
is doing, too.
– mosvy
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09
1
1
you're not telling what system you're using; on Linux you have all the info you need in the
/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.– mosvy
Jan 29 at 5:05
you're not telling what system you're using; on Linux you have all the info you need in the
/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.– mosvy
Jan 29 at 5:05
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
1
1
then go on and read
/proc/self/mountinfo
-- that's what findmnt(8)
is doing, too.– mosvy
Jan 29 at 5:09
then go on and read
/proc/self/mountinfo
-- that's what findmnt(8)
is doing, too.– mosvy
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09
add a comment |
1 Answer
1
active
oldest
votes
If you need to check the full list of mount points, use getmntent(3)
or its thread-safe GNU extension getmntent_r(3)
.
If you just want to quickly check whether a given directory has a filesystem mounted on it or not, then use one of the functions in the stat(2)
family. For example, if you want to check if /mnt
has a filesystem mounted or not, you could do something like this:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1)
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1)
perror("failed to stat parent:");
exit(EXIT_FAILURE);
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev)
printf("No, there is nothing mounted in that directory.n");
else
printf("Yes, there is currently a filesystem mounted.n");
I would advise against usinggetmnent()
&co. First, they're not able to parse/proc/self/mountinfo
(which contains info beyond/etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg.12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornerygetmntent()
interface, ever.
– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f497351%2fdetect-if-usb-disk-is-mounted-in-c-application-in-linux%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you need to check the full list of mount points, use getmntent(3)
or its thread-safe GNU extension getmntent_r(3)
.
If you just want to quickly check whether a given directory has a filesystem mounted on it or not, then use one of the functions in the stat(2)
family. For example, if you want to check if /mnt
has a filesystem mounted or not, you could do something like this:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1)
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1)
perror("failed to stat parent:");
exit(EXIT_FAILURE);
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev)
printf("No, there is nothing mounted in that directory.n");
else
printf("Yes, there is currently a filesystem mounted.n");
I would advise against usinggetmnent()
&co. First, they're not able to parse/proc/self/mountinfo
(which contains info beyond/etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg.12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornerygetmntent()
interface, ever.
– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
add a comment |
If you need to check the full list of mount points, use getmntent(3)
or its thread-safe GNU extension getmntent_r(3)
.
If you just want to quickly check whether a given directory has a filesystem mounted on it or not, then use one of the functions in the stat(2)
family. For example, if you want to check if /mnt
has a filesystem mounted or not, you could do something like this:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1)
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1)
perror("failed to stat parent:");
exit(EXIT_FAILURE);
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev)
printf("No, there is nothing mounted in that directory.n");
else
printf("Yes, there is currently a filesystem mounted.n");
I would advise against usinggetmnent()
&co. First, they're not able to parse/proc/self/mountinfo
(which contains info beyond/etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg.12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornerygetmntent()
interface, ever.
– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
add a comment |
If you need to check the full list of mount points, use getmntent(3)
or its thread-safe GNU extension getmntent_r(3)
.
If you just want to quickly check whether a given directory has a filesystem mounted on it or not, then use one of the functions in the stat(2)
family. For example, if you want to check if /mnt
has a filesystem mounted or not, you could do something like this:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1)
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1)
perror("failed to stat parent:");
exit(EXIT_FAILURE);
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev)
printf("No, there is nothing mounted in that directory.n");
else
printf("Yes, there is currently a filesystem mounted.n");
If you need to check the full list of mount points, use getmntent(3)
or its thread-safe GNU extension getmntent_r(3)
.
If you just want to quickly check whether a given directory has a filesystem mounted on it or not, then use one of the functions in the stat(2)
family. For example, if you want to check if /mnt
has a filesystem mounted or not, you could do something like this:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1)
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1)
perror("failed to stat parent:");
exit(EXIT_FAILURE);
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev)
printf("No, there is nothing mounted in that directory.n");
else
printf("Yes, there is currently a filesystem mounted.n");
answered Jan 29 at 8:09
telcoMtelcoM
17.6k12347
17.6k12347
I would advise against usinggetmnent()
&co. First, they're not able to parse/proc/self/mountinfo
(which contains info beyond/etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg.12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornerygetmntent()
interface, ever.
– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
add a comment |
I would advise against usinggetmnent()
&co. First, they're not able to parse/proc/self/mountinfo
(which contains info beyond/etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg.12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornerygetmntent()
interface, ever.
– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
I would advise against using
getmnent()
&co. First, they're not able to parse /proc/self/mountinfo
(which contains info beyond /etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg. 12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornery getmntent()
interface, ever.– mosvy
Jan 29 at 16:08
I would advise against using
getmnent()
&co. First, they're not able to parse /proc/self/mountinfo
(which contains info beyond /etc/mtab
), second, there's no guarantee that the info they're returning is up to date, and third the format of the file is simple enough to be parsed with sscanf (the only complication is translating octal sequences eg. 12
for newline in paths, but even that could be easily done in place with 2 lines of C). It's not worth the trouble to deal with the ornery getmntent()
interface, ever.– mosvy
Jan 29 at 16:08
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
What else do you suggest to use instead of getmnent()
– OpenSourceEnthusiast
Feb 7 at 4:21
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f497351%2fdetect-if-usb-disk-is-mounted-in-c-application-in-linux%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
you're not telling what system you're using; on Linux you have all the info you need in the
/proc/self/mountinfo
file, which you can read with fgets/sscanf. see the procfs(5) manpage.– mosvy
Jan 29 at 5:05
Sorry. Added that this is required for a Linux application
– OpenSourceEnthusiast
Jan 29 at 5:06
1
then go on and read
/proc/self/mountinfo
-- that's whatfindmnt(8)
is doing, too.– mosvy
Jan 29 at 5:09
See also: stackoverflow.com/questions/9280759/…
– J. Taylor
Jan 29 at 5:09