首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git-Bash for Windows 'rm‘是如何工作的?

Git-Bash for Windows 'rm‘是如何工作的?
EN

Stack Overflow用户
提问于 2018-01-23 02:40:10
回答 1查看 5K关注 0票数 11

在某些情况下,Git-Bash中的rm命令删除无法在资源管理器、cmd提示符、PowerShell或使用C++标准库调用中删除的文件。

为什么?

这让我感到困惑,因为我知道这里没有魔力,而且我假设它们都在使用相同的Win32 API。

例如,我的数据库快照仍然处于打开状态,不能使用所描述的其他方法删除,但是Git-Bash rm成功地删除了这些快照。

资源管理器删除:“由于文件是打开的,操作无法完成。”

cmd:del <path>:“访问被拒绝”

PS:Remove-Item -Force -Path <path>:“无法删除项。拒绝对路径的访问。”

C++ remove():返回-1

C++ unlink():返回-1

C++ _unlink():返回-1

git-bash rm <path>success

可以在不同的文件上重复执行上述操作。

还有其他锁定的文件,git rm也成功地删除了它(我过去使用过它,最近没有,也没有其他具体的例子)。

但是,它并不总是有效的:在一个测试应用程序中,我使用fopen()打开了一个文本文件,没有一个方法(包括Git-Bash rm )能够成功地删除它。

那么,Git-Bash rm是如何工作的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 18:12:01

我弄明白了这是怎么回事。

有趣的是,我在它的rm命令上使用了Git-Bash的strace实用程序。

结果是Git使用CygWin,在CygWin syscalls.cc文件中可以找到delete例程,它尝试以几种不同的方式删除文件。

最后,它尝试将文件移动到回收站,在回收站删除锁定的文件,方法是使用带有NtOpenFile标志的Windows FILE_DELETE_ON_CLOSE ()打开它,然后使用NtClose()关闭它。

不确定将CygWin的代码复制到这里的响应中是否合适,但是在提供的链接中可以找到关于上述所有内容的详细信息。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48393361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档