- •Введение
- •Достоинства и недостатки языка c
- •Типы данных в с
- •Модификаторы
- •Константы
- •Арифметические операции
- •Логические операции
- •Оператор присваивания
- •Организация множественных выражений
- •Комбинированные операции
- •Локальные и глобальные объекты
- •Модификатор extern
- •Статические и динамические объекты
- •Регистровые переменные
- •Описание неизменяемых объектов
- •Указатели
- •Явное преобразование типа
- •Оператор if
- •Операторы циклов Оператор while
- •Оператор do ... While
- •Оператор for
- •Оператор switch (переключатель)
- •Операторы передачи управления
- •Прототипы функций
- •Передача данных в функцию
- •Структуры и определения типов пользователя
- •Битовые поля
- •Объединения
- •Псевдофункция sizeof
- •Основные директивы препроцессора
- •Основные директивы условной компиляции
- •Дополнительные данные по Turbo-c
- •Организация памяти на машинах класса pc. Виды указателей
- •Работа с указателями на функцию
- •Основные регистры общего назначения процессора
- •Модели памяти
- •Использование стека
- •Организация прерываний в программе. Модификатор volatile
- •Порядок передачи данных в функцию. Модификатор pascal
- •Передача данных в программу. Функция main
- •Разбор типовых ошибок и недочетов при программировании
- •Некоторые функции библиотеки Turbo-c
- •Функции работы с оперативной памятью эвм
- •Функции работы с клавиатурой
- •Работа с дисплеем в символьном режиме
- •Работа с дисплеем в графическом режиме
- •Функции работы с дисками
- •Функции работы с временными интервалами и звуком
- •Функции преобразования данных
- •Функции работы со строками
- •Математические функции
- •Функции работы с файлами и каталогами
- •Функции работы со временем и датой
- •Функции процессов
- •Функции работы с портами машины
- •Интерфейс с дос
- •Задачи на практические занятия
- •Литература
- •Оглавление
Функции работы со временем и датой
1. Получение текущей даты. Прототип функции:
void getdate(struct date *dateblk);
Структура date:
struct date {
int da_year;
char da_day;
char da_mon; };
Пример печати текущей даты в принятом виде:
#include <stdio.h>
#include <dos.h>
main()
{
struct date d;
getdate(&d);
printf(“\nСегодня %02d.%02d.%d”,(int)d.da_day,(int)d.da_mon,d.da_year);
}
2. Установка даты. Прототип функции:
void setdate(struct date *dateblk);
3. Получение текущего времени. Прототип функции:
void gettime(struct time *timep);
Структура time:
struct time {
unsigned char ti_min; /* минуты */
unsigned char ti_hour; /* часы */
unsigned char ti_hund; /* сотые секунды */
unsigned char ti_sec; /* секунды */};
Пример печати текущего времени:
#include <stdio.h>
#include <dos.h>
#include <time.h>
#include <stdlib.h>
void main(void)
{
struct time d;
gettime(&d);
printf(“\nСейчас %d:%02d%02d.%02d”,(int)d.ti_hour,
(int)d.ti_min, (int)d.ti_sec, (int)d.ti_hund);
}
4. Установка времени. Прототип функции:
void settime(struct time *timep);
5. Преобразование времени и даты в строковое представление. Прототип функции:
char *ctime(long *clock);
Значение clock можно получить с помощью функции time. Функция возвращает указатель на строку из 26 символов с фиксированными полями, например, вида:
Mon Mar 30 11:46:34 1998\n\0
Функции процессов
Этот класс функций предназначен для запуска задач из программы и установки режимов их работы.
1. Экстренное завершение процесса. Прототип функции:
void abort(void);
2. Завершение программы. Прототипы функций:
void exit(int status);
void _exit(int status);
exit при выполнении закрывает все файлы, закрывает буфер вывода и передает status как код завершения программы (обычно ненулевой код - это ошибка). _exit при выходе не закрывает файлов и не очищает вывод.
3. Вызов других программ. Прототипы функций:
int execl(char *pathname, char *arg0, char *arg1, ... , NULL);
Вызов программы с указанным pathname именем с параметрами arg0, arg1 ... Возвращается значение 0, если запуск успешный. Поиск программы осуществляется только в текущем и корневом каталогах.
int execlp(char *pathname, char *arg0, char *arg1, ... , NULL);
В этом случае программа ищется в каталогах, определенных в ДОС.
Пример вызова архиватора RAR из программы:
#include <stdio.h>
#include <process.h>
main()
{
if (execlp(“rar”,””,NULL)==-1) printf(“\nОшибка!\n”);
}
Примечания:1. При вызове функций execl и execlp процесс-родитель остается активным. 2. arg0 не используется (там находится строка вызова программы.
int spawnl(int mode, char *pathname, char *arg0, char *arg1, ... , NULL);
int spawnlp(int mode, char *pathname, char *arg0, char *arg1, ... , NULL);
mode указывает, какие действия делает процесс-родитель после вызова spawn...:
P_WAIT - заморозить выполнение процесса-родителя до завершения работы процесса-потомка,
P_NOWAIT - продолжить выполнение процесса-родителя после запуска процесса-потомка.
Параметры поиска у функций spawn... тактие же, как и у exec...
При ошибке вызова этих функций устанавливается значение системной переменной errno в одно из следующих значений:
E2BIG - слишком длинный список аргументов,
EACCES - ошибка доступа,
EMFILE - слишком много открытых файлов,
ENOENT - маршрут или файл не найдены,
ENOEXEC - ошибка в формате exec,
ENOMEM - недостаточно памяти для запуска процесса-потомка.
4. Запуск команд ДОС. Прототип функции:
int system(char *command);
Функция возвращает код возврата.
Пример копирования файла с именем s1.txt в s2.txt с помощью ДОС:
#include <stdlib.h>
#include <stdio.h>
main()
{
if (system(“copy s1.txt s2.txt”)!=0) printf(“\nОшибка!\n”);
}