2013-06-24 6 views
1

나는 스플 라이스로 알고있다. 우리는 모두 커널에 머무를 수있다. 그러나 그것이 파이프에 전달되는 데이터 또는 소재 정보인지 여부는 확실하지 않습니다.Splice 시스템 호출, 파이프로 전달되는 내용은 무엇입니까? 데이터 또는 위치 정보?

편집 1 : 고마워요. @vinayak, 이제 데이터가 실제로 파이프 버퍼와주고받는 것을 알았습니다. 그런데, 왜 우리는 단지 소재와 길이 정보를 파이프에 전달할 수 없는지 궁금합니다. 단일 프로세스 내의

  • 는 주소 공간은 파이프 버퍼 선형 매핑 인 경우에도 작동 프로세스 간의 차이와 동일한
  • 이다. 그렇지 않은 경우 DMA 주소를 사용할 수 있습니다.

답변

3

refer here

스플 라이스()는 사용자에게 space.It가있다 /에서 복사를하지 않고 하나 개의 파일에서 커널 공간에서 다른 파일로하여 i/o를 할 수있는 시스템 호출 메커니즘입니다 I/O 성능을 향상시키는 방법. 스플 라이스 시스템 호출 은 사용자 공간에서 커널 공간 &으로의 모든 데이터 복사를 피할 수 있습니다. 이 은 입력 파일 &에서 지정된 오프셋을 읽고 커널 공간에 파이프에 씁니다. 사용자 공간에 데이터를 복사 할 수 없습니다. 을 호출하여 파이프의 데이터를 지정된 파일/에있는 출력 파일에 쓸 수 있습니다.

splice()는 파이프 버퍼 메커니즘을 사용하여 데이터 소스에 대한 파일 설명자를 열고 데이터 싱크에 대한 설명자를 열고 splice()를 사용하여 두 항목을 함께 결합 할 수 있습니다. 즉, splice()는 사용자가 제어 할 수있는 커널 버퍼에 을 작업하고 데이터 을 임의의 파일 설명자와 /에서 버퍼로 이동합니다. 파이프로 오프셋을 지정하면 평상시처럼 오류가 발생합니다. 입력 파일/출력 파일 디스크립터 에 오프셋이 지정되지 않은 경우 현재 오프셋은 이 지정된 오프셋으로 간주됩니다. 현재 파일 중 하나가 파이프 여야합니다. 그렇지 않으면 오류입니다.