IPC に FIFO を使用しています。しかし、彼らは奇妙な振る舞いをします。デモストレーションに関しては、コンパイルして実行できるコードをここに投稿します。追加情報、私は Linux Ubuntu を使用しています。基本的な g++ コンパイラが付属していますが、特別なことは何もありません。
#include <iostream>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <iostream>
using namespace std;
int main() {
cout << "START" << endl;
int fifo;
int code;
mkfifo("/tmp/FIFO", 666);
if ((fifo = open("/tmp/FIFO", O_RDONLY | O_NONBLOCK)) < 0) {
perror("open failed");
}
else {
cout << "open successed" << endl;
code = close(fifo);
cout << "close: " << code << endl;
if ((fifo = open("/tmp/FIFO", O_WRONLY | O_NONBLOCK)) < 0) {
perror("reopen failed");
}
else {
cout << "reopen successed" << endl;
code = close(fifo);
cout << "close: " << code << endl;
}
}
cout << "END" << endl;
return 0;
}
正常に閉じるので、出力についての私の期待は次のようなものです。
START
open successed
close: 0
reopen successed
close: 0
END
しかし、私はこれを得ました、2回目のオープンは失敗します。なんで?そして、なぜこのばかげたエラー メッセージが表示されるのでしょうか。
START
open successed
close: 0
reopen failed: No such device or address
END
書き込み用に FIFO を再度開きたいと思います。そして、上記のコードが機能しない理由を知りたいです。