IPC 용 FIFO를 사용하고 있습니다. 그러나 그들은 이상한 행동을합니다. 데모 스트 레이션에 관해서는 컴파일되고 실행될 수있는 몇 가지 코드를 게시합니다. 추가 정보, 저는 리눅스 우분투에서 기본 g ++ 컴파일러와 함께 제공됩니다. 특별한 것은 없습니다. 출력에 대한C++ FIFO 이상한 동작
#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
을하지만, 나는이있어, 두 번째 열린이 실패합니다. 왜? 그리고 왜이 바보 같은 오류 메시지로?
START
open successed
close: 0
reopen failed: No such device or address
END
정말 FIFO를 다시 쓰고 싶습니다. 그리고 위의 코드가 작동하지 않는 이유를 알고 싶습니다.
open()이 반환하고 실패한 후에 errno가 무엇인지보고 할 수 있습니까? 이것은 힌트를 줄 수 있습니다 .... – jwismar
'... (실패시) -1이 반환되고 errno는 에러를 나타 내기 위해 설정됩니다.''errno'의 반환 값은 무엇입니까? – Marlon
실제로 정확한 값을 알지 못합니다.하지만 perror가 코드 대신 메시지를 출력하기 때문에 필요하지 않습니다. ("해당 장치 또는 주소 없음"). – Daniel