- •Работа с файловой системой dos
- •Получение справочной информации
- •Void far *drv_addr;
- •24.11Стандартные библиотеки трансляторов Microsoft qc 2.5 и Borland содержат несколько функций, облегчающих получение справочной информации о состоянии дисковой подсистемы.
- •Void _dos_getdrive(unsigned *drive);
- •Void _dos_setdrive(unsigned drive, unsigned *drivecount);
- •Void main(void);
- •Void main(void) {
- •Создание, удаление и переименование каталогов
- •Void main(void);
- •Void main(void) {
- •Void main(void);
- •Void main(void) {
- •If(!mkdir(test_dir)) {
- •Int rename(char *oldname, char *newname);
- •Поиск в каталогах
- •Int _dos_findfirst(char *pattern, struct find_t *found, unsigned attr);
- •Int _dos_findnext(struct find_t *found);
- •Void print_info(struct find_t *pfind) {
- •Работа с файлами
- •Int creat(char *filename, int mode);
- •Int open(char *filename,
- •Int oflag [, int pmode]);
- •Int close(int handle);
- •3.5. Чтение/запись файлов
- •Int write(int handle, void *buffer, unsigned count);
- •Int read(int handle, void *buffer, unsigned count);
- •Void main(int, char *[]);
- •Void main(int argc, char *argv[]) {
- •Int source, taget, I;
- •Int eof(int handle);
- •3.6. Позиционирование
- •Void main(void);
- •Void main(void) {
- •Int handle;
- •3.7. Изменение атрибутов, времени и даты файлов
- •Void main(int argc, char *argv[]);
- •Void main(int argc, char *argv[]) {
- •3.8. Буферизация ввода/вывода
- •Int _cnt; // количество оставшихся байтов
- •Int fclose(file *stream);
- •Int fileno(file *stream);
- •Int fseek(file *stream, long offset, int origin);
- •Int fgetpos(file *stream, fpos_t *pos);
- •Int fsetpos(file *stream, fpos_t *pos);
- •Int fputc(int c, file *stream);
- •Int fgetc(file *stream);
- •Int fputs(char *string, file *stream);
- •Int fgets(char *string, int n, file *stream);
- •Int fprintf(file *stream, char *format [,arg]...);
- •Int fscanf(file *stream, char *format [,arg]...);
- •Void setbuf(file *stream, char *buffer);
- •Int setvbuf(file *stream, char *buffer, int mode,
- •Int fflush(file *stream);
- •Void filecpy(file *stream_from, file *stream_to);
- •Void main(int argc, char *argv[]) {
- •Void filecpy(file *stream_from, file *stream_to) {
- •3.9. Другие функции для работы с файлами
- •Int setmode(int handle, int mode);
- •Void rewind(file *stream);
- •Int dup(int handle);
- •Int dup2(int handle1, int handle2);
- •3.10. Таблица открытых файлов
Int creat(char *filename, int mode);
Эта функция и ее параметры описаны в файлах io.h, sys\types.h, sys\stat.h, errno.h.
Первый параметр определяет путь создаваемого файла и его имя. Если файл с указанным именем существует, и не имеет атрибута "Только читаемый", функция сбрасывает длину файла до нуля. Предыдущее содержимое файла при этом уничтожается.
Второй параметр позволяет задать атрибуты создаваемого файла. Он может иметь следующие значения:
S_IWRITE |
для создаваемого файла разрешена операция записи; |
S_IREAD |
для создаваемого файла разрешена операция чтения; |
S_IREAD | S_IWRITE |
для создаваемого файла разрешены операции чтения и записи. |
В операционных системах MS-DOS и OS/2 невозможно создать файл, в который можно было бы писать, но из которого было бы нельзя читать информацию. Поэтому задание второго параметра как S_IWRITE приведет к созданию такого файла, для которого разрешены как операция записи, так и операция чтения.
После создания файла функция creat() открывает новый файл и возвращает файловый индекс (handle) или код ошибки.
Функция open() предназначена как для открытия существующих файлов, так и для создания новых:
Int open(char *filename,
Int oflag [, int pmode]);
Первый и третий параметры в этой функции аналогичны параметрам функции creat(), причем третий параметр нужен только при создании нового файла. Квадратные скобки указывают на то, что этот параметр является необязательным.
Параметр oflag может являться результатом битовой операции ИЛИ над следующими константами, определенными в файле fcntl.h:
O_APPEN |
при записи в файл информация будет добавляться в конец файла; |
O_BINARY |
файл открывается для работы в двоичном режиме (игнорируются управляющие символы, такие как конец строки); |
O_CREAT |
создается новый файл и открывается для записи; эта константа игнорируется, если указанный в первом параметре файл уже существует; |
O_EXCL |
используется вместе с O_CREAT; если указанный в первом параметре файл существует, функция возвратит признак ошибки; |
O_RDONLY |
файл открывается только для чтения, попытка записи в файл приведет к тому, что функция записи вернет признак ошибки; |
O_RDWR |
файл открывается как для чтения, так и для записи; |
O_TEXT |
файл открывается в текстовом режиме; |
O_TRUNC |
существующий файл открывается и обрезается до нулевой длины (если для этого файла разрешена операция записи); |
O_WRONLY |
файл открывается только для записи (в операционных системах MS-DOS и OS/2 для файла, открытого с признаком O_WRONLY разрешено выполнение операции чтения). |
Для того, чтобы закрыть файл, открытый функциями creat() или open(), нужно использовать функцию close():
