2011-03-23 5 views
0

sendfile의 문제점은 fds 파일을 사용하여 두 개의 텍스트 파일을 복사 할 수 없다는 것입니다. 오류는 EINVAL입니다. // 디스크립터가 유효하지 않거나 잠겨 있거나, in_fd에 mmap()와 같은 연산을 사용할 수 없습니다.sendfile()이 일반 텍스트 파일을 복사하지 못합니다.

이것은 실제로 무엇을 의미합니까?

sendfile (man sendfile)의 man 페이지에서이 문장을 발견했습니다. 두 개의 일반 파일을 복사할지 여부는 확실하지 않습니다.

현재 (Linux 2.6.9) : in_fd는 mmap()와 유사한 작업 (즉, 소켓 일 수 없음)을 지원하는 파일이어야합니다. out_fd는 소켓을 참조해야합니다.

Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS. 

답변

1

sendfile()의 아이디어는 소켓을 통해 파일을 신속하게 보내는 것입니다 (웹 서버를 생각해보십시오). 일반 파일은 mmap() 일 수 있지만 소켓이 아니므로 일반 파일을 대상으로 보낼 때 폭파됩니다.

+0

맨 페이지의 sendfile도 같은 제안입니다. 이제 표준을 사용하고 있습니다. C++ 방식. ofstream << ifstream.rdbuf(). 리눅스와 관련되어 더 좋은 방법이 있습니까? – siddhusingh

+0

아닙니다. 일반적으로 "여기에 파일 복사"시스템 호출을 제공하는 OS가 아닙니다. – geekosaur

관련 문제