Я думаю, что при открытии файла заполняются соответствующие структуры данных для процесса, открывающего файл, которые включают указатель файла, дескриптор файла, v-узел и т. Д.
Теперь можно читать и записывать в файл, используя буферизованные потоки (fwrite, fread) или используя системные вызовы (чтение и запись).
Когда мы используем буферизованные потоки, мы буферизируем данные, а затем записываем или читаем их [Это сделано для целей эффективности]. Само это утверждение означает, что весь файл не считывается в память, но определенные байты считываются в буфер и затем становятся доступными.
В случае вызовов sys, таких как чтение и запись, выполняется буферизация на уровне ядра (с помощью fsync можно также очистить буфер ядра), но данные фактически читаются и записываются в устройство .file
checking existance of file
#include < sys/stat.h >
int main(){
struct stat file_i;
std::string f("myfile.txt");
if (stat(f.c_str(),&file_i) != 0){
cout << "File not found" << endl;
}
return 0;
}
Надеюсь, это прояснит немного.