Je voulais essayer le syscall d'épissage. J'ai cette fonction - il doit copier le contenu d'un fichier à un autre:Argument invalide lors de l'appel de l'épissure linux()
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);
}
}
}
Le deuxième appel à épissures dans la première itération renvoie EINVAL (argument invalide de perror) à chaque fois - ce qui pourrait être la raison?
De quel type de système de fichiers disposez vos fichiers? – Duck
Les deux ext3, mais j'ai aussi essayé de lire/dev/zero et écrire dans/dev/null avec la même erreur. –
Je viens de le résoudre - J'ai ouvert le fichier en utilisant fopen avec le mode "a +" - lorsqu'il a été changé en "w" - cela a fonctionné. –