Вход:  Пароль:  
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

2.2 Функции для работы с дисками, директориями и файлами

2.2.1 Функции потокового ввода-вывода

fopen, fdopen, freopen (POSIX) <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fildes, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
fopen – открывает файл с именем path и связывает его с потоком.
fdopen – связывает поток с существующим описателем файла <fildes>.
freopen – открывает файл с именем path и связывает его с потоком stream. Исходный поток (если такой существовал) закрывается.


fclose (POSIX) <stdio.h>
int fclose( FILE *stream);
Закрывает поток <stream>.


feof (POSIX) <stdio.h>
int feof(FILE *stream);
Возвращает не ноль если достигнут конец файла (EOF) потока <stream>.


ferror (POSIX) <stdio.h>
int ferror(FILE *stream);
Возвращает не ноль если установлен признак ошибки чтение потока.


fgetc, getc, getchar (POSIX) <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
Считывает символ из потока <stream> или из stdin.


fgets, gets (POSIX) <stdio.h>
char *fgets(char *restrict s, int n, FILE *restrict stream);
char *gets(char *s);
Чтение строки из потока <stream> или из STDIN в буфер <s> размером <n>.


fgetwc, getwc (POSIX) <stdio.h, wchar.h>
wint_t fgetwc(FILE *stream);
wint_t getwc(FILE *stream);
Считывает широкий символ из потока <stream>.


fgetws (POSIX) <wchar.h>
wchar_t *fgetws(wchar_t *ws, int n, FILE *stream);
Чтение строки широких символов из потока <stream> в буфер <ws> размером <n>.


fprintf (POSIX) <stdio.h>
int fprintf(FILE *stream, const char *format, ...);
Осуществляет форматированный вывод в поток <stream> (Табл.10).


fputc, putc (POSIX) <stdio.h>
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
Помещает символ в поток <stream>.


fputs, puts (POSIX) <stdio.h>
int fputs(const char *restrict s, FILE *restrict stream);
int puts(const char *s);
Помещает строку <s> в поток <stream> или в STDOUT.


fputwc, putwc (POSIX) <stdio.h, wchar.h>
wint_t fputwc(wchar_t wc, FILE *stream);
wint_t putwc(wchar_t wc, FILE *stream);
Помещает широкий символ в поток <stream>.


fputws (POSIX) <wchar.h>
int fputws(const wchar_t *ws, FILE *stream);
Помещает строку широких символов <s> в поток <stream>.


fread (POSIX) <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
Чтение блоков данных <nmemb> размером <size> каждый из потока <stream> в буфер <ptr>. Возвращается количество удачно прочитаных блоков.


fseek, fseeko, fsetpos (POSIX) <stdio.h>
int fseek(FILE *stream, long offset, int whence);
int fseeko(FILE *stream, off_t offset, int whence);
int fsetpos(FILE *stream, const fpos_t *pos);
Установка позиции в потоке <stream> в соответствии с правилом <whence> и смещением <offset>. В случае с fsetpos позиция устанавливается из структуры <pos>.


fflush (POSIX) <stdio.h>
int fflush(FILE *stream);
«Сбрасывает» буферы потока <stream>.


ftell, ftello, fgetpos (POSIX) <stdio.h>
long ftell(FILE *stream);
off_t ftello(FILE *stream);
int fgetpos(FILE *restrict stream, fpos_t *restrict pos);
Получение текущей позиции в потоке <stream>. В случае с fgetpos выполняется заполнение структуры <pos>.


fwrite (POSIX) <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Запись в поток <stream> блоков данных <nmemb> размером <size> каждый из буфера <ptr>. Возвращается количество удачно записанных блоков.


perror (POSIX) <stdio.h>
void perror(const char *s);
Выводит в стандартный поток ошибки сообщения, описывая ошибку, произошедшую при последнем системном вызове или вызове библиотечной функции.


rewind (POSIX) <stdio.h>
void rewind(FILE *stream);
Сброс указателя позиции потока <stream>.


setbuf, setvbuf (POSIX) <stdio.h>
void setbuf(FILE *restrict stream, char *restrict buf);
int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
Установка правила буферизации потока <stream>. Если <buf> равно NULL, то буферизации отключается. Режим буферизации указывается в <type>: _IOFBF(полная буферизация), _IOLBF(построчная), _IONBF(отсутствие).


Таблица 9. Символы управления форматированием функций типа printf()
Элемент
Эффект
%[флаги][ширина][.точность][F | N | h | l]<тип>
Флаги
0Для чисел, ширина поля слева будет заполнена нулям.
-Производится выравнивание выводимого числа по левому краю в пределах выделенного поля. Правая сторона выделенного поля дополняется пробелами.
+Выводится знак числа символом '-' или '+'
*Обозначает пропуск при вводе поля, определенного данной спецификацией. Введенное значение не присваивается ни какой переменной.
<Пробел>Выводится пробел перед положительным числом и знак '-' перед отрицательным.
#

Выводится идентификатор системы счисления для целых:

  • 0 перед числом в восьмеричной с/c;
  • 0х или 0Х в шеснадцатеричной с/c;
  • ничего для чисел в десятичной с/c.
Ширина (воздействует только на вывод)
nОпределяет минимальную ширину поля в <n> символах. Если после преобразозования ширины недостаточно, то выводится столько символов сколько есть, с дополнением пробелами.
0nВсе тоже, но позиции слева для целого числа дополняются нулям.
*Число выводимых символов определяется значением соответствующей переменной.
Точность (воздействует только на вывод)
<ничего>Точность по умолчанию.
.0Для d, i, o, u, x – точность по умолчанию. Для e, E, f – десятичная точка отсутствует.
.nДля e, E, f не более <n> знаков после точки.
*Следующий аргумент из списка аргументов – точность.
Модификатор (воздействует там, где применимо)
hПеред d, i, o, u, x, X аргумент является – short int.
lПеред d, i, o, u, x, X аргумент является – long int. Перед e, E, f, g, G аргумент является – double (только для scanf).
LДлиное двойной точности.
FУказатель (FAR).
NУказатель (NEAR).
Поле образец – %[*][ширина] [образец]
Определяет множество символов, из которых может состоять вводимая строка. Если в образце стоит символ '^', то вводится будут все символы кроме перечисленных: [a-z],[A-F0–9]; [^0–9]
Тип переменной: char
cПри вводе, читается и передается переменной один байт. При выводе – байт переменной преобразуется к типу char и записуется в выходной поток.
Тип переменной: int
dДесятичное int со знаком.
iДесятичное int со знаком.
oВосьмеричное int без знака.
uДесятичное int без знака.
xШеcтнадцатеричное int без знака (0 – f).
XШестнадцатеричное int без знака (0 – F).
nУказатель NEAR (только смещение).
pУказатель FAR (сегмент[селектор]:смещение).
Тип переменной: float
fЗначение со знаком в форме [-]dddd.dddd .
eЗначение со знаком в форме [-]d.dddde[+ | -]ddd .
EЗначение со знаком в форме [-]d.ddddE[+ | -]ddd .
gЗначение со знаком в формате 'e' или 'f' в зависимости от значения и специфицированной точности.
GЗначение со знаком в формате 'E' или 'F' в зависимости от значения и специфицированной точности.
Тип переменной: char *
sПри вводе принимает символы без преобразования до тех пор, пока не встретится '\n' или пока не достигнута специфицированная точночть. При выводе выдаёт в поток все символы до тех пор пока не встретится '\0' или не достигнута специфицированная точность.

2.2.2 Работа с директориями

chdir, fchdir (POSIX) <unistd.h>
int chdir(const char *path);
int fchdir(int fd);
Установка текущей директории <path>, <fd>.


ftw, nftw <ftw.h>
int ftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag), int depth);
int nftw(const char *dir, int (*fn)(const char *file, const struct stat *sb, int flag, struct FTW *s), int depth, int flags);
Перемещается по дереву каталогов, начиная с указанного каталога <dir>. Для каждого найденного элемента дерева вызываются: <fn()> с указанием полного имени этого элемента, указатель на структуру элемента <stat> и целое число. Функция nftw() выполняет то же самое, что и ftw(), только имеет еще один параметр, flags, то есть вызывает свои функции еще с одним параметром.


getcwd (POSIX) <unistd.h>
char *getcwd(char *buf, size_t size);
Копирует абсолютный путь к текущему рабочему каталогу в массив <buf>, имеющий длину <size>.


mkdir (POSIX) <sys/stat.h, sys/types.h>
int mkdir(const char *pathname, mode_t mode);
Создаёт каталог <pathname> с режимом <mode>.


opendir, closedir (POSIX) <sys/types.h, dirent.h>
DIR *opendir(const char *name);
int closedir(DIR *dir);
Открывает/закрывает поток каталога, соответствующий каталогу <name>.


readdir (POSIX) <sys/types.h, dirent.h>
struct dirent *readdir(DIR *dir);
Возвращает указатель <dir> на следующую запись каталога.


rmdir (POSIX) <unistd.h>
int rmdir(const char *pathname);
Удаляет каталог <pathname>.


2.2.3 Доступ к файлам

access (POSIX) <unistd>
int access(const char *pathname, int mode);
Проверка, имеет ли процесс <pathname> права <mode> на чтение(R_OK), запись(W_OK), выполнение(X_OK) или существование файла(F_OK).


close (POSIX) <unistd.h>
int close(int fd);
Закрывает открытый описатель файла <fd>.


creat (POSIX) <sys/types.h, sys/stat.h, fcntl.h>
int creat(const char *pathname, mode_t mode);
Создаёт файл <pathname> и возвращает его описатель.


dup, dup2 (POSIX) <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
dup – предоставляет новому описателю наименьший свободный номер. dup2 – делает <newfd> копией <oldfd> (если это необходимо), закрывая newfd.


fcntl (POSIX) <unistd.h, fcntl.h>
int fcntl(int fildes, int cmd, ...);
Выполняет различные операции <cmd> над файловым дескриптором <fildes>.


flock (BSD) <sys/file.h>
int flock(int fd, int operation);
Устанавливает или снимает <operation> «мягкую» блокировку открытого файла <fd>.


fsync, fdatasync (POSIX) <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
fsync – копирует все части файла, находящиеся в памяти, на устройство <fd>. fdatasync – тоже что и fsync, но без метаданных.


fileno (ANSI) <stdio.h>
int fileno(FILE *stream);
Возвращает описатель <stream>.


link (POSIX) <unistd.h>
int link(const char *oldpath, const char *newpath);
Создание ссылки <newpath> на файл <oldpath>.


lseek (POSIX) <sys/types.h, unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
Устанавливает позицию чтения/записи информации в файле.


mknod (BSD) <sys/types.h, sys/stat.h, fcntl.h, unistd.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
Создаёт файл (обычный файл, файл устройства или именованный канал) <pathname>, с правами доступа <mode> и дополнительной информацией <dev>.


open (POSIX) <sys/types.h, sys/stat.h, fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Открывает файл <pathname> и возвращает описатель файла.


pathconf, fpathconf (POSIX) <unistd.h>
long pathconf(char *path, int name);
long fpathconf(int filedes, int name);
Получение значения конфигурационной опции для указанного файла <path>, <filedes>. Конфигурационные опции:

_PC_LINK_MAX — максимальное количество ссылок на файл;
_PC_NAME_MAX — максимальная длина имени файла в полном имени;
_PC_PATH_MAX — максимальная длина полного имени указанного файла;
_PC_PIPE_BUF — размер указанного канала.

read, readv (POSIX) <unistd.h, sys/uio.h>
ssize_t read(int fd, void *buf, size_t count);
int readv(int fd, const struct iovec * vector, int count);
Записывает <count> байтов файлового описателя <fd> в буфер <buf> или вектор <vector>.


readlink (POSIX) <unistd.h>
ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize);
Помещает содержимое символьной ссылки <path> в буфер <buf> длиной <bufsiz>.


remove (ANSI,POSIX) <stdio.h>
int remove(const char *pathname);
Удаляет имя файла и, возможно, сам файл.


rename (ANSI) <unistd.h>
int rename(const char *oldpath, const char *newpath);
Изменяет имя или расположение файла <oldpath> на <newpath>.


select (POSIX) <sys/time.h, sys/types.h, unistd.h>
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, sigset_t *sigmask);
Ждут изменения статуса нескольких файловых описателей в течении <timeout>. n – на единицу больше самого большого номера описателей из всех наборов. Для манипуляции набором существуют 4 макроса:


sendfile (*) <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
Производит чтение данных из <in_fd> по смещению <offset> длиной <count> и запись их в <out_fd>.


stat, fstat, lstat (POSIX) <sys/types.h, sys/stat.h, unistd.h>
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
stat – возвращает информацию о файле <file_name> и заполняет буфер <buf>;
lstat – дополнительно информацию о ссылке;
fstat – информацию о <filedes>.


statvfs, fstatvfs (POSIX) <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
Получение информации о файловой системе на которой расположен файл <path>, <fd>.


symlink (POSIX) <unistd.h>
int symlink(const char *oldpath, const char *newpath);
Создание символьной ссылки <newpath> на файл <oldpath>.


write, writev (POSIX) <unistd.h, sys/uio.h>
ssize_t write(int fd, const void *buf, size_t count);
int writev(int fd, const struct iovec * vector, int count);
Записывает <count. байтов из буфера <buf> или вектора <vector> в файл <fd>.


unlink (POSIX) <unistd.h>
int unlink(const char *pathname);
Удаляет имя файла из файловой системы. Если это имя было последней ссылкой на файл и нет ни одного процесса, которые бы открыли этот файл, то файл удаляется.


Таблица 10. Стандартные потоки ввода-вывода

ИмяНазначение
stdin(0)Стандартный вход;
stdout(1)Стандартный выход (буфериз.);
stderr(2)Стандартный выход ошибок (небуфериз.);

2.2.4 Функции работы с временными файлами

mkstemp (BSD) <stdlib.h>
int mkstemp(char *template);
Создает временный файл с уникальным именем определённым <template>. <template> должен иметь в конце символы “XXXXXX”. Возвращает описатель fd созданного файла и заполняет XXXXXX, в template, сгенерированными символами. Нуждается в удалении!


mktemp (POSIX) <stdlib.h>
char *mktemp(char *template);
Создает временный файл с уникальным именем определённым <template>. <template> должен иметь в конце символы “XXXXXX”. Возвращает имя созданного файла.


tmpfile (POSIX) <stdio.h>
FILE *tmpfile (void);
Создает уникальное имя временного файла с помощью префикса пути P_tmpdir, определенного в <stdio.h>. Файл автоматически удаляется при его закрытии или в случае завершения основной программы.


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]