在我的程序(在Mac OS X上)中,我使用以下代码打开了该文件。打开读取和写入的文件可以取消关联
int fd;
fd = open(filename, O_RDWR);
计划要删除的文件如下:
unlink(filename);
在我的情况,我有被打开,删除相同的文件。我观察到以下内容:
- 打开文件后,我可以使用此程序甚至通过使用
rm
命令将其删除。 - 删除文件后,读取和写入操作对文件没有任何问题。
我想知道背后的原因。如何防止rm
命令或unlink(2)
系统调用删除正在打开的文件?
打开这不就是'取消链接的预期行为(2)'?你检查过文件吗? “如果 一个或多个进程在最后一个链接被删除时打开文件,链接将被删除,但文件的删除将被延迟,直到所有对该文件的引用都被关闭。” –
@CarlNorum:我检查了取消链接(2)。这是预期的行为。但是为什么unlink(2)之后的读写操作成功了? – doptimusprime
就像文档说的那样,文件在引用关闭之前不会被删除。该文件仍然存在,所以'read'和'write'应该继续工作,对吧? –