리눅스에서 간단한 데몬을 작성하려고합니다. FIFO를 작성한 다음 FIFO에 기록 된 데이터를 수집하고 나중에 해당 데이터를 파일에 기록합니다.유닉스 FIFO가 제대로 작동하는 데 문제가 있습니까?
일단 내 데몬이 FIFO를 만든 후에는 "echo text/myfifo"를 반복해서 수행 할 수 있습니다. 끝나면 "echo quit>/myfifo"를 수행 할 수 있으며 내 프로그램이 종료되고 모든 데이터가 디스크에 기록됩니다.
현재 FIFO에 더 많은 데이터가있는지를 알기 위해 poll()을 사용하고 있습니다. 이것은 FIFO에 데이터를 처음 반향시킬 때까지 정상적으로 작동합니다. 데이터가 잘 표시되지만 내 설문 조사 후에는 계속 SIGHUP을 반환합니다.
각 프로세스가 FIFO를 쓰고 난 후 FIFO를 재설정 (또는 닫으려면 & 다시 열어야합니까?)합니까? 내 코드의
의사 코드는 다음과 같습니다
ret = fifo(my_fifo, mode);
fd = open(my_fifo, O_RDONLY | O_NONBLOCK);
polling.fd = fd;
polling.events = POLLIN | POLLPRI;
do {
ret = poll(&polling, 1, -1);
amt = read(fd, buf, bufsize);
// do stuff
} while (!done);
예, FIFO를 다시 열어야합니다. 많은 사람들은 동기화 모드에서 FIFO를 열면 다른 쪽에서도 FIFO가 열릴 때까지 차단된다는 것을 잊어 버릴 수 있습니다. 즉, 예를 들어, 셸 리디렉션. 그래서 그것은 마치 연결처럼 행동합니다. – Dummy00001