Volevo provare lo splice syscall. Ho questa funzione - dovrebbe copiare il contenuto di un file all'altro:Argomento non valido quando si chiama 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);
}
}
}
La seconda chiamata a unire in prima iterazione restituisce EINVAL (argomento non valido da perror) ogni volta - quello che potrebbe essere il motivo?
Che tipo di file system sono i tuoi file? – Duck
Entrambi ext3, ma ho anche provato a leggere da/dev/zero e scrivere a/dev/null con lo stesso errore. –
L'ho appena risolto - Ho aperto il file usando fopen con la modalità "a +" - quando cambiato in "w" - funzionava. –