我正在研究一个需要安装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”命令无法看到它。这有什么不对吗?
答案 0 :(得分:2)
在查找已安装的文件系统时,mount命令将遵循/etc/mtab
文件的内容。
在某些系统上,这是一个真实的,诚实的,良好的普通文件,这意味着某些东西必须更新它。更新它的程序通常是mount
命令本身。此文件的内容不是保证文件系统已安装或未安装;例如,有一个选项可以挂载 - -n
,表示不更新/etc/mtab
文件。
在相当多的Linux环境中,它是/proc/mounts
文件的符号链接,其中包含内核对已安装内容的理解,这是已安装内容的真实列表。
通过使用mount
系统调用,您绕过了更新/etc/mtab
文件的机制,因此如果它不是符号链接,那么最终它的行为与使用{{1}类似}。
检查mount -n
文件,您将看到文件系统已安装。