Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Таким образом, обычная дата, такая же, как полученная из программы date, соответствует следующей строке формата функции
strftime
"%a %b %d %Н: %М: %S %Y"
Для облегчения чтения дат можно использовать функцию
strptime
tm
<b>#include <time.h></b>
<b>char *strptime(const char *buf, const char *format, struct tm *timeptr);</b>
Строка
format
strftime
strptime
sscanf
tm
format
strptime
strftime
strptime
strptime
strftime
strptime
Функция
strptime
tm
Рассмотрим работу функций на примере (упражнение 4.9).
strftime
strptime
Обратите внимание на выбор спецификаторов преобразований, использованных в следующей программе:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
struct tm *tm_ptr, timestruct;
time_t the_time;
char buf[256];
char *result;
(void)time(&the_time);
tm_ptr = localtime(&the_time);
strftime(buf, 256, "%A %d %B, %I:%S %p", tm_ptr);
printf("strftime gives: %sn", buf);
strcpy(buf, "Thu 26 July 2007, 17:53 will do fine");
printf("calling strptime with: %sn", buf);
tm_ptr = &timestruct;
result = strptime(buf, "%a %d %b %Y, %R", tm_ptr);
printf("strptime consumed up to: %sn", result);
printf("strptime gives:n");
printf ("date: %02d/%02d/%02dn",
tm_ptr->tm_year % 100, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf("time: %02d:%02dn",
tm_ptr->tm_hour, tm->ptr->tm_min);
exit(0);
}
Когда вы откомпилируете и выполните программу strftime.c, то получите следующий результат:
$ <b>./strftime</b>
strftime gives: Saturday 09 June, 08:16 AM
calling strptime with: Thu 26 July 2007, 17:53 will do fine
strptime concurred up to: will do fine
strptime gives:
date: 07/07/26
time: 17:53
Как это работает
Программа strftime получает текущее местное время с помощью вызовов функций
time
localtime
strftime
strptime
%R
strptime
%Н:%M
Важно отметить, что для успешного просмотра даты функции strptime необходима точная строка формата. Обычно она не может точно обработать даты, считываемые из строк, введенных пользователями, до тех пор, пока не будет строго выверен формат.
Возможно, при компиляции программы strftime.c вы получите предупреждение компилятора. Причина в том, что по умолчанию в библиотеке GNU не объявлена функция
strptime
#define _XOPEN_SOURCE
Временные файлы
Зачастую программы нуждаются в возможности использования временного хранилища в виде файлов. В них могут храниться промежуточные результаты вычислений, или резервные копии файлов, сделанные перед выполнением критических операций. Например, приложение для работы с базой данных может применять временный файл при удалении записей. В файле собираются элементы базы данных, нуждающиеся в сохранении, и затем в конце процесса временный файл становится новой базой данных, а исходная база данных удаляется.
У столь популярных временных файлов есть скрытый недостаток. Вы должны следить за тем, чтобы приложения выбирали уникальное имя для временного файла. Если это условие не соблюдается, могут возникнуть проблемы. Поскольку ОС Linux — многозадачная система, другая программа может выбрать то же самое имя, и обе будут мешать друг другу.
Уникальное имя файла генерируется с помощью функции
tmpnam