Это зависит ...
Он как-то взаимодействует с собственной системой ввода-вывода операционной системы. Он может внутренне использовать библиотеку C, которая использует системные вызовы ядра, или он может использовать системные вызовы напрямую. Точная реализация сильно зависит от платформы.
Многие скажут, что не изобретайте велосипед, но это может быть хорошим опытом обучения. Если вы используете Windows, посмотрите на вызовы Win32 API для обработки файлов. Если вы используете Linux, либо используете библиотеку POSIX / C, либо используете системные вызовы (гораздо сложнее, я бы предложил использовать библиотеку C).