logo search
ООП для Заоч / Пинчук Лозовская Программир на С

Ifstream fa("a.Dat");

cout << "Дескриптор файлу = << (fa.rdbuf())->fd() << endl;

Для визначення дескриптора спочатку викликається функція-член потоку rdbuf() класу fstream для об'єкта fa. Вона повертає адресу спеціального об'єкту класу filebuf, який асоційовано з fa. Такий об’єкт є буфер, що створюється для забезпечення роботи кожного потоку, він містить у собі також і дескриптор файлу. Далі викликається функція fd() - член класу filebuf, вона саме й повертає дескриптор файлу fa.

Для того, щоб уникнути записів громіздких і малозрозумілих виразів, які обчислюють дескриптори, можна побудувати спеціальну функцію або відповідний макрос. Нижче наведені приклади побудови функції й макросу для одержання дескрипторів файлів.

У наступному прикладі побудована зручна функція descr для одержання дескриптору файла.

// Приклад 8

#include <fstream.h>

template <class FSTR>

// шаблон FSTR може приймати значення,

// ifstream, ofstream, fstream