OpenSCADAWiki:
Roman Savochenko
/
C Short All
/
part2
/part2
...
Home
|
Index
|
Changes
|
Comments
|
Users
|
Registration
|
Login
:
Password:
====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()** #| ||%%(wacko wrapper=text wrapper_align=center)**Элемент**%%|%%(wacko wrapper=text wrapper_align=center)**Эффект**%%|| ||%%(wacko wrapper=text wrapper_align=center) %[флаги][ширина][.точность][F | N | h | l]<тип> %%|| ||%%(wacko wrapper=text wrapper_align=center)**Флаги**%%|| ||0|Для чисел, ширина поля слева будет заполнена нулям.|| ||-|Производится выравнивание выводимого числа по левому краю в пределах выделенного поля. Правая сторона выделенного поля дополняется пробелами.|| ||+|Выводится знак числа символом '-' или '+'|| ||*|Обозначает пропуск при вводе поля, определенного данной спецификацией. Введенное значение не присваивается ни какой переменной.|| ||<Пробел>|Выводится пробел перед положительным числом и знак '-' перед отрицательным.|| || # |Выводится идентификатор системы счисления для целых: * 0 перед числом в восьмеричной с/c; * 0х или 0Х в шеснадцатеричной с/c; * ничего для чисел в десятичной с/c.|| ||%%(wacko wrapper=text wrapper_align=center)**Ширина (воздействует только на вывод)**%%|| ||n|Определяет минимальную ширину поля в <n> символах. Если после преобразозования ширины недостаточно, то выводится столько символов сколько есть, с дополнением пробелами.|| ||0n|Все тоже, но позиции слева для целого числа дополняются нулям.|| ||*|Число выводимых символов определяется значением соответствующей переменной.|| ||%%(wacko wrapper=text wrapper_align=center)**Точность (воздействует только на вывод)**%%|| ||<ничего>|Точность по умолчанию.|| ||.0|Для d, i, o, u, x - точность по умолчанию. Для e, E, f - десятичная точка отсутствует.|| ||.n|Для e, E, f не более <n> знаков после точки.|| ||*|Следующий аргумент из списка аргументов - точность.|| ||%%(wacko wrapper=text wrapper_align=center)**Модификатор (воздействует там, где применимо)**%%|| ||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).|| ||%%(wacko wrapper=text wrapper_align=center)**Поле образец - %[*][ширина] [образец]**%%|| ||Определяет множество символов, из которых может состоять вводимая строка. Если в образце стоит символ '^', то вводится будут все символы кроме перечисленных: [a-z],[A-F0-9]; [^0-9]|| ||%%(wacko wrapper=text wrapper_align=center)**Тип переменной: char**%%|| ||c|При вводе, читается и передается переменной один байт. При выводе - байт переменной преобразуется к типу char и записуется в выходной поток.|| ||%%(wacko wrapper=text wrapper_align=center)**Тип переменной: int**%%|| ||d|Десятичное int со знаком.|| ||i|Десятичное int со знаком.|| ||o|Восьмеричное int без знака.|| ||u|Десятичное int без знака.|| ||x|Шеcтнадцатеричное int без знака (0 - f).|| ||X|Шестнадцатеричное int без знака (0 - F).|| ||n|Указатель NEAR (только смещение).|| ||p|Указатель FAR (сегмент[селектор]:смещение).|| ||%%(wacko wrapper=text wrapper_align=center)**Тип переменной: float**%%|| ||f|Значение со знаком в форме [-]dddd.dddd .|| ||e|Значение со знаком в форме [-]d.dddde[+ | -]ddd .|| ||E|Значение со знаком в форме [-]d.ddddE[+ | -]ddd .|| ||g|Значение со знаком в формате 'e' или 'f' в зависимости от значения и специфицированной точности.|| ||G|Значение со знаком в формате 'E' или 'F' в зависимости от значения и специфицированной точности.|| ||%%(wacko wrapper=text wrapper_align=center)**Тип переменной: 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 макроса: * FD_ZERO - очищающий набор; * FD_SET - Добавляет заданный описатель к набору; * FD_CLR - Удаляет описатель из из набора; * FD_ISSET - Проверяет, является ли описатель частью набора; **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>. Файл автоматически удаляется при его закрытии или в случае завершения основной программы.
Please type the word you read in the image: