2009-07-25 5 views
0

Je le code suivant dans Cproblème avec lseek

long from = atol(buffer); 
printf("From: %ld\n", from); 

int file_fd = open(fullPath, O_RDONLY); 
if (file_fd == -1) error("Error opening file"); 

if (from > -1) 
{ 
    int a = lseek(file_fd, from, SEEK_SET); 
    if (a == -1) 
     error("Error in lseek"); 
} 

L'opération lseek revient Erreur dans lseek: Invalid argument, à la suite de

void error(char *msg) 
{ 
    perror(msg); 
    exit(1); 
} 

Avez-vous une idée comment puis-je le déboguer pour que je puisse trouver ce qui ne va pas? Je pensais que c'était très banal mais ça me rend fou.

Merci

+0

Qu'en est-il d'errno? – EricSchaefer

+0

Que se trouve dans le tampon au début de votre extrait de code? –

+0

En tant qu'utilisateur, je serais probablement plus heureux si les deux gestionnaires d'erreur affichés étaient codés comme 'error (fullPath);' –

Répondre

2

Avez-vous essayé strace sur le processus? Je vérifierais cela avant de creuser dans la source pour savoir où est "argument invalide" jeté.

En voyant la réponse de Sean, avez-vous inclus les en-têtes appropriés?

#include <sys/types.h> 
    #include <unistd.h> 
+1

J'avais unistd.h manquant! Merci beaucoup – juan

+0

Compile avec -Wall pour attraper certains problèmes comme ça. Vous devriez probablement avoir #include pour atol(). –

+0

En fait, pourquoi ne pas utiliser les fonctions de flux standard C - fopen, fseek et al? –