2016-12-20 1 views
1

나는 비디오 장치에서 프레임을 잡아 내고 액세스 할 수없는 독점적 인 드라이버를 사용하여 루프를 실행하는 C++ 프로그램을 가지고 있습니다.리눅스에서 C++ 스트림 인터페이스

while(true) { 
    mybuf = getNextFrame(); // blocks 
} 

다른 프로그래밍 언어를 사용하여 일부 논리를 작성하고자하므로 다음 인터페이스를 사용하려고합니다. (리눅스 지원 만 필요합니다.) 어딘가에 파일을 가지고있을 생각이었습니다. /my/video/device 그리고 read()을 호출 할 때마다 현재 프레임이 나에게 줄 것입니다. 또한 read()를 다시 호출하면 다음 프레임을 사용할 수있을 때까지 차단하여 반환하고 싶습니다. 또한 open()을 잠시 호출하지 않으면 프레임 사이의 버퍼링을 원하지 않습니다.

최상의 접근 방법은 무엇입니까? FUSE를 사용하여 파일 시스템을 구현하려고 시도했지만 파일이 일반 파일 인 경우 파일 내부를 탐색하려고 시도하고 파일에 지정된 크기까지만 읽습니다. 나는 문자 장치를 만들었지 만, 내 read() 함수를 호출하지 않을 것이다. 대신에 허가가 거부되었다고 말할 것이다. ...

나는 CUSE 나 줄을 따라 무엇인가 시도하는 것에 대해 생각하고 있었다. 나는 복잡한 일을 끝내고 있습니까? 난 단지 내 C++ 루프에서 끊임없이 오는 프레임 스트림으로 작업 할 수 있어야하지만 Python이나 Go 같은 다른 언어로 구문 분석하려고합니다. 또한 C++ 코드의 컴파일을 Go 또는 Python과 섞어 놓고 싶지는 않습니다. 두 코드가 완전히 분리되어 있기를 바랍니다. 두 파일 사이에 일종의 파일 API가 있으면 작업이 더 쉬워 질 것이라고 생각했습니다. 이것을 처리하는 좋은 방법은 무엇입니까?

+0

이름이있는 파이프는 찾고있는 것입니까? –

+0

@ Zekian 명명 된 파이프를 시도했지만 수신 측의 연결이 끊어지면 루프가 존재합니다. 파이프에 연결하고 연결 해제 할 수 있어야합니다. –

답변

0

명명 된 파이프를 사용하여 프로그램을 작성합니다. 한 가지 명심해야 할 점은 수신 중간에 연결이 끊어지면 서버가 SIGPIPE 신호를 수신하고이 신호가 처리되거나 차단되지 않으면 서버가 종료된다는 것입니다.