Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

6.4.14. Запуск из приложения внешних программ

Функции объявлены в файлах process.h, stdlib.h, stdio.h

int execl(char *path, char *arg0, *argl, ..., *argn, NULL) ‑ выполняет порожденный процесс path с аргу­ментами arg0 - argn.

int execle(char *path, char *arg0, *argl, ..., *argn, NULL, char **env - вы­пол­няет порожденный процесс path с аргументами arg0 - argn и с окружением env.

int execlp(char *path, char *arg0,*argl, ..., *argn, NULL) ‑ выполняет порожденный процесс path с аргу­ментами arg0 ‑ argn, с поиском в PATH.

Пример вызова редактора Word:

execlp (“Winword”, “Winword”, “Delphi.doc”,NULL)

int execlpe(char *path, char *arg0, *argl, ..., *argn, NULL, char **env) - вы­пол­няет порожденный процесс path с аргу­ментами arg0 ‑ argn, с поиском в PATH и с окружением env.

int execv(char *path, char *argv[]) ‑ выполняет порожденный процесс path с аргу­ментами argv[].

int execvp(char *path, char *argv[]) ‑ выполняет порожденный процесс path с аргу­ментами argv[], с поиском в PATH.

int system(const char *command) ‑ выполняет команду command опе­ра­цион­ной системы и возвращается в приложение.

6.5. Работа с файлами

6.5.1. Файлы в с

Состав файла задается структурой FILE. В начале работы стан­дарт­ный файл ввода stdin приписывается клавиа­туре, а стандартный файл вы­во­да stdout - экрану дисплея. Перед обработкой файла он объявляется и затем открывается, а пос­ле обработки ‑ закрывается.

Файлы бывают следующих типов:

текстовый ‑ состоит из последовательности сим­волов, разбитой на стро­ки. Для деления на строки используется управляющий символ ‘\n’. Для работы с текстовыми файлами удобно работать специальными методами загрузки (LoadFromFile) и сохранения (SaveToFile);

двоичный - это последовательность значений типа char.

Символ EOF в операциях ввода/вывода служит для обозначения и проверки конца файла или возникновения ошибки ввода/вывода.

Функции открытия и закрытия файлов

FILE *fopen (char *filename, char *type) - открытие файла. В качестве пер­вого аргумента передается имя файла.

Второй аргумент определяет тип открываемого файла:

r - открыть уже существующий файл на ввод;

w - создать новый файл или очистить уже существующий файл и открыть его на вывод;

а - создать новый файл для вывода или осуществить вывод в конец уже существующего файла;

r+ - открыть существующий файл для обновления с начала файла;

w+ - создать новый или очистить существующий файл для обновления его со­держимого;

а+ - создать новый файл или подстроиться в конец существующего файла для обновления его содержимого.

Дополнительно к каждой из приведенных строк можно добавить символ

b - открывается двоичный файл.

Функция fopen возвращает указатель (файловая переменная) на структуру FILE, описывающую файл. Если при открытии файла произош­ли какие-либо ошибки, то в глобальную переменную еrrnо будет записан код (номер) ошибки, и будет возвра­щен нулевой (0) указатель.

int fclose (FILE *file) - файл закрывается. Если за­крытие выполняется правильно, то возвращается 0, иначе ‑ EOF;

void rewind (FILE *file) ‑ указатель файла перемещается в начало файла.

Функции ввода

Int fgetc (FILE *file) - из указанного входного файла считывается очеред­ной символ, и его значение перево­дится в тип int. Если при считывании обна­ружи­вает­ся ошибка или достигается конец файла, то возвращается значение EOF.

Int getchar() - из стандартного входного файла stdin считывается очеред­ной символ, и его значение пере­водится в тип int.

Int getch() - аналогична getchar, но не требует нажатия клавиши после вво­да символа и останавливает работу программы до нажатия клавиши. Эта функция используется для ввода односимволь­ного ответа.

int fseek (FILE *file, long offset, Int wherefrom) - служит для произволь­ного доступа к символам, обычно внутри двоичных файлов. Первый аргумент задает имя файла Второй аргумент offset является длинным целым числом со знаком и указывает число байтов смещения от точки, определяемой третьим параметром функции. Третий аргумент wherefrom указывает точку, от ко­торой следует начинать отсчет смещения: от нача­ла файла (0), текущей позиции файла (1), от конца файла (2).

char *fgets (char *s, Int n, FILE *file) - в строку s считываются символы до тех пор, пока не будет выполнено первым одно из условий: начнется новая строка, достигнут конец файла или прочитано n-1 символов. После того как из входного файла в строку s бу­дут прочитаны символы, строка до­пол­няется ноль‑символом (признак конца строки). Если операция счи­ты­ва­ния прошла успешно, то возвращается адрес строки s, иначе ‑ нуль.

char *gets ( char *s) - выполняется считывание сим­волов из стандартного входного файла stdin. Если вход­ной файл прерывается символом перехода на новую строку ‘\n’, то этот символ не попадает в строку s.

Int fread ( void *ptr, unsigned elem_size, int count, FILE *file) - из входного файла считыва­ются и по адресу *ptr записываются не более чем количест­во count элементов размером elem_size байтов каждый. Функция возвра­щает число фактически считанных элементов.

Int feof(FILE *file) - если при чтении из указанного файла достигнут конец файла (попытка прочитать символ за пределами файла), то возвра­щает­ся ненулевое значение, иначе - нулевое значение.

int scanfОшибка! Закладка не определена. (char *fornat, <дополнительные аргументы> );

int fscanf (FILE *strea“, char *format,< дополнительные аргументы> );

int sscanf (char *string, char *fогmаt,< дополнительные аргументы> );

int cscanf (char *format, <дополнительные аргументы> );

Все функции семейства scanf вводят поля символ за символом, переводя их в соответствии с указанным форма­том. Функцией scanf осуществляется ввод из стандартного файла stdin. Функция fscanf может вводить из файла, указанного пользователем. Фун­кция sscanf вводит из заданной строки. Функция cscanf вводит с кон­соли. Первое .вводимое поле преобразуется в соответствии со спецификацией формата, и полу­ченное значение заносится по адресу первого аргумента. Следующее поле переводится в соответ­ст­вии со второй спецификацией фор­мата и т.д. Спецификация формата аналогична спецификации формата для семейства функций printf (п. 6.2.4).

Поля ввода определяются по следующим правилам:

группа символов до (но не включая) символа - раз­делителя;

группа символов до такого символа, который не мо­жет быть преоб­ра­зо­ван в соответствии с текущей спецификацией;

группа из n символов, где n - указатель ширины по­ля.

Функции вывода

Int fflush (FILE *file) - служит для выталкивания каждого внутреннего бу­­фера на соответствующее устройство. После вызова функции файл остается открытым. Если при выполнении функции появятся ошибки, то будет возвращено значение EOF, иначе - 0.

Int fputc (char ch, FILE *file) - символ ch записывается в указанный выход­ной файл. Если запись прошла успешно, то возвращается значение ch.

int putchar (char ch) - действует аналогично функции fputc, но записывает символ ch в стандартный выходной файл stdout.

Int fputs (char *s, FILE *file) - строка s, ограниченная ноль-символом, переписывается в выходной файл, причем ноль-символ отбрасывается. Если при переписи возникает ошибка, то возвращается значе­ние EOF, в противном случае возвращается ненулевое зна­чение.

Int puts (char *s) - функция аналогична функции fputs, за исключением того, что символы переписываются в стандартный файл stdout, и строка s дополняется ноль‑символом конца строки.

Int fwrite (void *ptr, unsigned elem_size,Int count,FILE <stream>) - начиная с адреса ptr, считывается не более чем количество count элементов размером elem_size байтов каждый, и эти элементы записываются в вы­ход­ной файл. Функция возвращает число фактически записанных элементов.

Int fprintf (FILE *stream,char *format,< список выводимых значений> );

Int printf (char *format ,<список выводимых значений> );

Int sprintf (char *s, char *foramt, < список выводимых значений> );

Int cprintf (char *format, < список выводимых значений> );

С помощью этих функций выполняется форматный вывод соот­ветственно в: выход­ной файл (fprintf), в стандартный выходной файл stdout (fprintf), ука­зан­ную строку (sprintf) или на терминал (cprintf). Функции возвращают число символов, переданных по назначе­нию.

Строка формата (char *format) задает редактирование данных (п. 6.2.5).

Функции обработки ошибок

Int ferror (FILE *file) - возвращает нулевое значение, если последняя операция ввода/вывода с указанным файлом закончилась успешно, иначе ‑ нену­ле­вое значение.

void clearerr (FILE *file) - устанавливается в нуль состояние признака ошибки в указанном файле.

Пример программы создания справочника товара spravtov.txt