2016-10-15 7 views
0

process1.cpp:最初は、私ははmkfifo()を使用してmyfifo名前付きパイプファイルを作成し パイプファイルを削除した後、通信がまだ機能するのはなぜですか?

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

、その後、 myfifoの記述を与えた:process2.cpp
const char* myfifo = "./myfifo"; 
mkfifo(myfifo,0666); 
fd = open(myfifo, O_RDONLY); 
wait(0); 
read(fd, &sum, 4); 

をprocess1とprocess2に変更してから、 unlink()を使用して myfifoを削除してください。 プログラム全体が動作しますが、削除後に2つのプロセスを読み書きできるのは変です。 myfifo誰でもその理由を知っていますか?場合だけ、あなた unlink()ファイルは、ファイルが実際にファイルシステムから削除され

+0

[documentation](https://linux.die.net/man/2/unlink)から:*名前がソケット、fifoまたはデバイスを参照した場合、その名前は削除されますが、開いているオブジェクトが引き続き使用する可能性があります。* – UnholySheep

答えて

0

  • 他のすべてのリンクが削除され、
  • 他のプロセスが同じファイルを参照するオープンファイル記述子を持っていません
関連する問題