Files, Part 1: fseek - tcloaa/SystemProgramming GitHub Wiki
We've already seen open and fopen (todo link here) so let's look at some more advanced concepts.
#How do I tell how large a file is?
For files less than the size of a long, using fseek
and ftell
is a simple way to accomplish this:
Move to the end of the file and find out the current position.
//SEEK_END
fseek(f, 0, SEEK_END);
long pos = ftell(f);
This tells us the current position in the file in bytes - i.e. the length of the file!
fseek
can also be used to set the absolute position.
//SEEK_SET
fseek(f, 0, SEEK_SET); // Move to the start "0" of the file.
fseek(f, posn, SEEK_SET); // Move to 'posn' in the file.
All future reads and writes in the parent or child processes will honor this position. Note writing or reading from the file will change the current position.
See the man pages for fseek and ftell for more information.
fclose
or close
?
What happens if a child process closes a filestream using Unlike position, closing a file stream is unique to each process.
Other processes can continue to use their own file-handle.