c - 为什么删除pipe文件后还能通信?

标签 c linux named-pipes

<分区>

进程1.cpp:

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

进程2.cpp:

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

首先,我使用mkfifo()创建了一个名为myfifo的管道文件,然后将myfifo的描述符给process1和process2,然后使用unlink() 删除myfifo。 整个程序运行正常,但奇怪的是我删除了myfifo后仍然可以在两个进程之间读写。有谁知道原因吗?

最佳答案

当您unlink() 一个文件时,当且仅当:

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

关于c - 为什么删除pipe文件后还能通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40057755/

相关文章:

linux - 为什么 gtkmm 有时会自动创建第二个线程?

c - 在单个进程中使用命名管道

c - 打印二维字符数组,数字代表开头的行

c - Glade GTK 访问各个小部件

c - 为什么 spoj 对此 "Even Count"的解决方案给出了错误的答案

linux - Shell 脚本保存终端( screen )输出

linux - 没有 bash 运行时权限被拒绝

无法弄清楚如何在我的客户端-服务器模型中实现线程

c - 无法在 Windows 7 中的命名管道内创建进程

c - 在C中将字符串存储在char数组中