What exactly is the FILE keyword in C?

I’ve started learning some C as a hobby and have blindly used FILE as a declaration for file pointers for quite some time, and I’ve been wondering. Is this a keyword or special data type for C to handle files with? Does it contain a stream to the file within and other data? Why is it defined as a pointer?

An example to show what I mean to make it a little more clear:

FILE* fp; //<-- this
fp = fopen("datum.txt", "r");

while(!feof(fp)) {
   // etc.
}

What exactly is the FILE keyword in C?