在Linux上安装USB存储器时出现问题

时间:2013-11-18 07:23:11

标签: c linux usb

我正在研究一个需要安装USB存储器并写入的C程序。它可以安装,但后面的“mount”命令不会显示它。我真的很困惑。

以下是代码:

#include <stdio.h>
#include <sys/mount.h>
#include <errno.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char *usb_path = argv[1];
        int ret = mount(usb_path, "/mnt/usb_mount_point", "ext3", 0, NULL);
        if (ret == 0) {
                printf("mount() succeeded.\n");
        } else {
                printf("mount() failed: %d, %s\n", errno, strerror(errno));
        }
        return (ret);
}

我做的是: 我发现了一个vfat类型的USB存储器,并使用“mkfs.ext3 /dev/sdb4”将其格式化为ext3;奇怪的是“fdisk -l”仍将它显示为vfat:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb4   *           1        1890    15180768+   c  W95 FAT32 (LBA)

然后我使用我的程序安装它:“./my_prog /dev/sdb4”。它成功了,我可以cd进/ mnt / usb_mount_point来处理USB存储。

但是“mount”命令无法看到它。这有什么不对吗?

1 个答案:

答案 0 :(得分:2)

在查找已安装的文件系统时,mount命令将遵循/etc/mtab文件的内容。

在某些系统上,这是一个真实的,诚实的,良好的普通文件,这意味着某些东西必须更新它。更新它的程序通常是mount命令本身。此文件的内容不是保证文件系统已安装或未安装;例如,有一个选项可以挂载 - -n,表示不更新/etc/mtab文件。

在相当多的Linux环境中,它是/proc/mounts文件的符号链接,其中包含内核对已安装内容的理解,这是已安装内容的真实列表。

通过使用mount系统调用,您绕过了更新/etc/mtab文件的机制,因此如果它不是符号链接,那么最终它的行为与使用{{1}类似}。

检查mount -n文件,您将看到文件系统已安装。