2013-06-14 4 views
1

Qt C++의 프로그램에서 제로 복사 메서드를 구현해야하는데, 그것에 대해 읽고 transferto() method.as를 아래에서 설명합니다. public void transferTo (long position, long count, WritableByteChannel target);Qt C++ 프로그램에서 제로 복사하는 방법은 무엇입니까?

하지만 어떻게 작동하는지 이해할 수 없습니다. 내부적으로는 기본 운영 체제의 제로 사본 지원에 따라 달라집니다. 그래서 함수를 작성하려고했지만 여기서 "위치"와 "채널"의 의미를 얻지 못했습니다.

아무도 도와 줄 수 있습니까?

+0

? 'transferTo (..)'는 Java IIRC입니다. – cmannett85

+0

C++에서 transferto() 대신 C++을 사용할 수 있습니까? –

답변

4

C++에서 제로 복사를 수행하는 데 교차 플랫폼 방식이없고 Qt에 제로 복사 API가 없습니다. 당신이 제공하는 API를 사용하여 대상 OS를 위해 그것을 구현할 수 있습니다

리눅스는 SYS/socket.h의 sendfile을, sendfile64 및 스플 라이스로 호출 시스템을 통해 제로 카피를 지원합니다. Windows는 TransmitFile API를 통해 제로 사본을 지원합니다.

Source

어떤 언어
+0

즉, 내 의도 된 장소에 소켓 버퍼에 데이터를 복사하는 함수를 작성해야합니다. 그리고 나에게 transferto() 함수를 설명 할 수 있습니다. 즉, 여기에 채널과 위치가 무엇인지 설명해서 직접 함수를 구현할 수 있습니다. –

+0

언급 된 API 문서를 참조하십시오. 나는 그들에 익숙하지 않다. –

+0

불행히도'TransmitFile'은 핸들과 네트워크 소켓 사이에서만 작동합니다. 비 네트워크 장치간에 파일을 복사하거나 파이프 사이에서 데이터를 이동하는 등의 방법으로 사용할 수 있다면 좋겠지 만, 그렇지는 않습니다. ( –