Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
168
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Fnsplit

-----------------------------------------------------------------

НазначениеРасщепляет полное имя файла на компоненты.

Синтаксис #include<dir.h>

void fnsplit(char *path, char *drive,

char *dir, char *name,

char *ext);

Прототип вdir.h

Замечанияfnsplit берет полное имя файла в виде строки

X:\DIR\SUBDIR\NAME.EXT

и расщипляет его на четыре компоненты. Затем

сохраняет эти компоненты в строках, указываемых

параметрами drive, dir, name и ext. (Каждая

компонента обязательна, но может быть и NULL.

Это означает, что соответствующая компонента не

будет сохранена).

Максимальные размеры этих строк задаются конс-

тантами MAXDRIVE, MAXDIR, MAXPATH, MAXNAME и

MAXEXT (определяются в dir.h), и каждый размер

включает место для символа конца строки (\0).

Константа (максимум) строка

--------- ---------- ------

MAXPATH (80) path;

MAXDRIVE (3) drive, включает двоеточие

MAXDIR (66) dir, включает ведущий и

заключительный слеши (\);

MAXFILE (9) name;

MAXEXT (5) ext, включает ведущую

точку (.)

fnsplit предполагает, что имеется достаточно

места для сохранения каждой отличной от NULL

компоненты.

Когда fnsplit расщипляет path, она обрабатывает

знаки препинания так:

* drive содержит двоеточие (C:, A: и т.д.).

* dir содержит ведущий и заключающий обратные

слеши (\turboc\include\, \source\, и т.д.).

* name содержит имя файла.

* ext содержит точку, предшествующую расширению

(.C, .exe, и т.д.).

fnmerge и fnsplit взаимнообратные функции, если

вы разъедините path посредством fnsplit, а за-

тем соедините полученные компоненты с помощью

fnmerge, то получите опять path.

Возвращаемоеfnsplit возвращает целое (получаемое из пяти

значениефлагов, определенных в dir.h), показывающее,

какие из компонент полного имени присутствуют в

path; эти флаги и компоненты, которые они

представляют, следующие:

EXTENSION - расширение

FILENAME - имя файла

DIRECTORY - каталог (и, возможно,

подкаталоги)

DRIVE - спецификация драйвера(см dir.h)

WILDCARD - универсальные сопоставления (*

или ?)

ПереносимостьУникальна для MS-DOS.

Смотри такжеfnmerge

Пример Смотри fnmerge

-----------------------------------------------------------------

fopen

-----------------------------------------------------------------

НазначениеОткрывает поток.

Синтаксис#include<stdio.h>

FILE *fopen(const char *filename, char *type);

Прототип вstdio.h

Замечанияfopen открывает файл с именем filename и возв-

ращает укзатель, используемый для идентификации

потока в последующих операциях.

Тип строки type, используемый при каждом вызо-

ве, может принимать одно из следующих значений:

r Открыть только для чтения

w Создать для записи

a Добавление; открыть для записи в ко-

нец файла или создать для записи,

если файл не существует

r+ Открыть существующий файл для изме-

нения (запись и чтение)

w+ Создать новый файл для изменения

a+ Открыть для добавления; открыть (или

создать, если файл не существует)

для добавления в конец файла.

Для задания того, что файл открыт или создан в

текстовом режиме, вы можете добавить t к значе-

нию type (rt, w+t, и т.д.); аналогично для за-

дания двоичного режима вы должны добавить b к

значению type (wb, a+b, и т.д.). fopen также

допускает менять местами символы b, t и + в

строке режима. Например, использование rt+ эк-

вивалентно r+t.

Если t или b в type не заданы - режим определя-

ется значением глобальной переменной _fmode.

Если _fmode установлена в O_BINARY, то файлы

будут открыты в двоичном режиме. Если _fmode

установлена в O_TEXT - файлы будут открыты в

текстовом режиме. Эти константы определены в

файле fcntl. h.

Когда файл открыт для изменения - в результиру-

ющий поток может быть произведен как ввод, так

и вывод. Однако вывод не может сразу следовать

за вводом без запроса fseek или rewind, как и

ввод не может сразу следовать за выводом без

запроса fseek или rewind, или ввода, который

встречает конец файла.

ВозвращаемоеПри успешном завершении fopen возвращает

значениеуказатель на вновь открытый поток. В случае

ошибки - возвращает NULL.

Переносимостьfopen доступна в системах UNIX и совместима с

ANSI Си. Она определена Керниганом и Ритчи.

Смотри также creat, dup, fclose, fdopen, ferror, _fmode (пе-

ременная), fread, freopen, open, setbuf,

setmode.

Пример

#include<stdio.h>

main()

{

FILE *in, *out;

if ((in = fopen("\\AUTOEXEC.BAT",

"rt")) == NULL);

{

fprint(stderr, "Невозможно открыть файл"

" ввода.\n");

return(1);

}

if ((in = fopen("\\AUTOEXEC.BAК",

"wt")) == NULL);

{

fprint(stderr, "Невозможно открыть файл"

" вывода.\n");

return(1);

}

while (!feof(in))

fputs(fgetc(in), out);

fclose(in);

fclose(out);

}

-----------------------------------------------------------------

FP_OFF

-----------------------------------------------------------------

НазначениеПолучает смещение far-адреса.

Синтаксис #include<dos.h>

unsigned FP_OFF(void far *farptr);

Прототип вdos.h

ЗамечанияFP_OFF - макрофункция, которая может быть ис-

пользована для получения смещения far-указателя

farptr.

ВозвращаемоеFP_OFF возвращает беззнаковое целое, представ-

значениеляющее значение смещения.

Смотри такжеFP_SEG, MK_FP, movedata, segread

Пример

#include<stdio.h>

#include<dos.h>

main()

{

char far *ptr;

unsigned seg, off;

ptr = MK_FP(0xB000,0);

seg = FP_SEG(ptr);

off = FP_OFF(ptr);

printf("far ptr %Fp, segment %04x, offset"

" %04x\n", ptr, seg, off);

}

Результат выполнения программы

far ptr B000:000, segment b000, offset 0000

-----------------------------------------------------------------