Chciałem wypróbować połączenie splicingowe. Mam tej funkcji - należy skopiować zawartość jednego pliku do drugiego:Nieprawidłowy argument podczas wywoływania 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);
}
}
}
Drugie wezwanie do splatać w pierwszej iteracji zwraca EINVAL (nieprawidłowy argument, z perror) za każdym razem - co może być przyczyną?
Jakiego rodzaju system (i) plików to pliki? – Duck
Zarówno ext3, ale także próbowałem czytać z/dev/zero i pisać do/dev/null z tym samym błędem. –
Właśnie go rozwiązałem - otworzyłem plik używając fopen z trybem "a +" - po zmianie na "w" - zadziałało. –