splice 시스템 호출을 시험해보고 싶었습니다. 나는이 기능을 가지고 - 그것은 또 다른 하나 개의 파일의 내용을 복사해야합니다 :linux splice()를 호출 할 때 잘못된 인수가 있습니다.
static void test_splice(int in, int out) {
int i = 0, rcvd = 0;
int filedes[2];
off_t off = 0;
if (pipe(filedes) < 0) {
perror("Kicha pipe");
exit(EXIT_FAILURE);
}
for (i = 0; i < NUMLOOPS; ++i) {
if ((rcvd = splice(in, NULL, filedes[1], NULL, BUFSIZE, SPLICE_F_MORE | SPLICE_F_MOVE)) < 0) {
perror("splice");
exit(EXIT_FAILURE);
}
if (splice(filedes[0], NULL, out, NULL, rcvd, SPLICE_F_MORE | SPLICE_F_MOVE) < 0) {
perror("splice");
exit(EXIT_FAILURE);
}
}
}
첫 번째 반복에 잇기 두 번째 호출은 (perror는에서 잘못된 인수) 매번 EINVAL을 반환 - 어떤 이유가 될 수 있을까?
파일은 어떤 종류의 파일 시스템입니까? – Duck
둘 다 ext3이지만, 나는 또한/dev/zero에서 읽기를 시도하고/dev/null에 같은 오류를 썼다. –
방금 해결했습니다 - "a +"모드로 fopen을 사용하여 파일을 열었습니다 - "w"로 변경하면 효과가있었습니다. –