Ich wollte den Splice-Syscall ausprobieren. Ich habe diese Funktion - es sollte Inhalt einer Datei in eine andere kopieren:Ungültiges Argument beim Aufruf von 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);
}
}
}
Der zweite Anruf in der ersten Iteration spleißbar kehrt EINVAL (ungültiges Argument von perror) jedes Mal - was könnte der Grund sein?
Welche Art von Dateisystem (en) sind Ihre Dateien? – Duck
Beide ext3, aber ich habe auch versucht, von/dev/zero zu lesen und mit demselben Fehler in/dev/null zu schreiben. –
Ich habe es gerade gelöst - ich öffnete die Datei mit fopen mit Modus "a +" - wenn auf "w" geändert - es hat funktioniert. –