file pointer

what is the difference between a file pointer and a file descriptor.

FILE *in;  
is a struct that is used by stdio.h routines to access files, called a stream, they ultimately point to a file descriptor number:
int fd=open(....);
which is created by the open call.

Normally a file pointer is NOT a "stream". A file pointer is defined as the current position in the file maintained for a given file descriptor - the OS keeps track of it. What I think you meant by file pointer is the "stream" above.
ftell() returns the position of the file pointer relative to the start of the file.