栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

可以在文件名中使用“ /”吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

可以在文件名中使用“ /”吗?

答案是,除非文件系统有错误,否则您将无法这样做。原因如下:

有一个系统调用,用于重命名

fs/namei.c
名为的文件
renameat

SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,     int, newdfd, const char __user *, newname)

当系统调用被调用时,它将

do_path_lookup
对名称进行路径查找()。继续跟踪,我们可以看到
link_path_walk

static int link_path_walk(const char *name, struct nameidata *nd){       struct path next;       int err;       unsigned int lookup_flags = nd->flags;       while (*name=='/')   name++;       if (!*name)   return 0;...

此代码适用于任何文件系统。什么意思
这意味着,如果您尝试

'/'
使用传统方式将带有实际字符的参数作为文件名传递,它将无法执行您想要的操作。无法逃脱角色。如果文件系统“支持”此文件,则是因为它们要么:

  • 使用unipre字符或 看起来 像斜杠但不是的字符。
  • 他们有一个错误。

此外,如果 确实
要编辑字节以在文件名中添加斜杠字符,则可能会发生不良情况。那是因为您永远无法使用名称:(来引用该文件,因为无论何时,Linux都会假定您所引用的目录不存在。使用’rm
*’技术也不起作用,因为bash只是将其扩展为文件名。甚至

rm -rf
都行不通,因为一个简单的strace揭示了事情在幕后进行的过程(简称):

$ ls testdirmyfile2 out$ strace -vf rm -rf testdir...unlinkat(3, "myfile2", 0)    = 0unlinkat(3, "out", 0)        = 0fcntl(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)close(3)          = 0unlinkat(AT_FDCWD, "testdir", AT_REMOVEDIR) = 0...

请注意,对这些的调用

unlinkat
将失败,因为它们需要按名称引用文件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号