매개변수 offset
는 유형 off_t
이고 nbytes
유형이며 size_t
둘 다 파일 길이라는 동일한 내용을 설명합니다. 내 파일이 보다 길지만 짧다면 off_t
어떻게 되나요 size_t
? 비동기식으로 보내면 현재 파일 오프셋이 더 커질 수 있지만 크기가 더 크기 off_t
때문에 더 많이 보내고 싶습니다 .size_t
off_t
서명된 경우와 size_t
서명되지 않은 경우 모두 항상 낮춥니다.
설정할 수 있다는 것을 알고 있지만 nbytes = 0
구체적으로 길이를 사용하고 싶습니다.
답변1
offset
매개변수가 설명하는 것과는 다릅니다 nbytes
. 대신, 파일에서 복사된 바이트가 시작되고 끝나는 위치를 각각 설명합니다.
파일 크기가 131,072바이트(128KiB)이고 offset
16,384 및 nbytes
32,768을 사용하는 경우 sendfile()
파일의 위치 16,384에서 위치 49,152로 복사하여 위치 16,384에서 시작하여 총 32KiB( 에서 지정 nbytes
) 를 복사합니다 offset
.
offset
114,688과 32,768을 사용하는 경우 위치 114,688에서 파일 끝 위치 131,072까지 총 16KiB를 복사 nbytes
하게 됩니다 . sendfile()
파일이 예상보다 짧기 때문에 nbytes
요청한 sendfile()
것보다 적은 양의 데이터가 전송됩니다.
offset
147,456과 nbytes
32,768을 사용 하면 sendfile()
0바이트가 전송됩니다. 시작 부분이 파일 끝 부분을 지나면 복사할 바이트가 없으므로 아무 것도 보내지 않습니다.
마지막으로 0으로 설정된 특수한 경우가 있는데 nbytes
, 이는 파일의 전체 내용을 복사하므로 offset
0과 nbytes
0을 사용하면 sendfile()
전체 파일에 대해 총 131,072바이트(128KiB)가 전송됩니다.