给定文件或目录的路径,如何确定该文件的安装点?例如,如果/tmp
作为tmpfs
文件系统挂载,则给定文件名,/tmp/foo/bar
我想知道它存储在tmpfs
根目录下/tmp
。
这将是C ++语言,我希望避免通过调用外部命令system()
。该代码应该健壮-不一定要防止故意的篡改,但绝对要面对嵌套的安装点,符号链接等。
我还没有找到一个简单的系统调用来执行此操作。看来我得自己写支票。这是我计划的粗略概述。
readlink
shell命令中规范化文件名。 怎么样?/etc/mtab
与getmntent()
&合作阅读。对于#1,有一个简单的系统调用,还是我需要读取路径的每个目录组件,并用readlink(2)
符号链接来解析它们?和处理.
与..
自己?似乎很痛苦。
对于#3,我对如何执行此操作有各种想法。不知道哪个最好。
open()
文件,其父级,其父级的父级等,openat(fd, "..")
直到到达其中一项为止/etc/mtab
。( 我怎么知道什么时候?fstat()
它们并比较inode的数量?)我倾向于第一种选择,但是在编写全部代码之前,我想确保我没有忽略任何东西-理想情况是内置函数已经做到了!
这就是我想出的。原来,通常不需要遍历父目录。您所要做的就是获取文件的设备号,然后找到具有相同设备号的相应安装条目。
struct mntent *mountpoint(char *filename, struct mntent *mnt, char *buf, size_t buflen)
{
struct stat s;
FILE * fp;
dev_t dev;
if (stat(filename, &s) != 0) {
return NULL;
}
dev = s.st_dev;
if ((fp = setmntent("/proc/mounts", "r")) == NULL) {
return NULL;
}
while (getmntent_r(fp, mnt, buf, buflen)) {
if (stat(mnt->mnt_dir, &s) != 0) {
continue;
}
if (s.st_dev == dev) {
endmntent(fp);
return mnt;
}
}
endmntent(fp);
// Should never reach here.
errno = EINVAL;
return NULL;
}
感谢@RichardPennington率先提出realpath()
并比较设备编号而不是inode编号。
问题内容: 我有一个用于下载文件的网络界面。当请求进入时,我的glassfish服务器从Web服务流式传输文件,然后将内容写入输出流。我的代码工作正常,除非当文件大小变得很大(如200 MB以上)时,它挂起,显示0%在浏览器中下载,并且文件从未下载。 当我在while循环内移动flush()方法时,它也适用于大型文件。我不确定将flush()放入循环是否有问题。不知道这东西实际上是如何工作的。我的
问题内容: 我在Windows中使用Docker Toolbox,并尝试将Windows文件夹安装在docker-compose.yml文件中,如下所示: 我的目标是将Docker Toolbox已经创建的boot2docker VM映像安装到该映像,然后从该映像加载到其中的nginx容器。 不幸的是,它不起作用。我在boot2docker映像中找到一个文件夹sss,但是它没有指定我的Window
问题内容: 我正在使用使用docker映像的Selenium: 它有效,我可以连接到任何URL并导航。但是,当我单击按钮下载文件时,有时会将文件(部分保存为)保存到,有时保存到…无处,或者找不到我找不到的其他位置… 有什么理由吗? 我也尝试使用打开驱动程序 但它返回一个奇怪的错误 鉴于所有链接都在Windows中,但是我的selenium在docker容器或Ubuntu中运行,因此我可以理解为什么
问题内容: 我正在尝试将源文件安装到位于/ var / dynamo的Docker目录中。我希望能够在本地运行Docker并在工作时使用本地文件。 使用运行命令: 与我的 Dockerfile 但是,当我将bash放入容器并运行时,该目录 为空! 运行显示目录已正确安装 Docker版本是1.9.1 问题答案: Docker&Virtualbox在将卷装载到/ Users目录之外时似乎出现了问题。
我尝试读取数据块中的dbc文件(从s3存储桶装载)。文件路径是: 如何使用火花读取此文件? 我尝试了下面的代码: 但它生成并错误: 谢谢帮忙!
《 Linux挂载》一节讲到,所有的硬件设备必须挂载之后才能使用,只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载,而有些(比如 U 盘、光盘)则需要手动进行挂载。 通过学习 Linux 文件系统,我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。而要将文件系统挂载到 Linux 系统上,就需要使用 m