为什么删除管道文件后通信仍然有效?

时间:2016-10-15 10:13:11

标签: c linux named-pipes

process1.cpp:

const char* myfifo = "./myfifo";
mkfifo(myfifo,0666);
fd = open(myfifo, O_RDONLY);
wait(0);
read(fd, &sum, 4); 

process2.cpp:

fd = open(myfifo, O_WRONLY);
unlink(myfifo);
write(fd, &write_int, sizeof(write_int) );

首先,我使用 mkfifo()创建了一个名为 myfifo 的管道文件,然后将 myfifo 的描述符提供给process1和process2,然后使用取消关联()删除 myfifo 。 整个程序都有效,但在删除 myfifo 后,我仍然可以在两个进程之间进行读写,这很奇怪。谁知道原因?

1 个答案:

答案 0 :(得分:0)

当您unlink()文件时,该文件实际上是从文件系统中删除的,当且仅当:

  • 删除所有其他链接,
  • 没有其他进程具有引用同一文件的打开文件描述符