LINUX.ORG.RU

struct tm и преобразование int в char*


0

1

Всем доброго времени При написании программы возникла необходимость получать местное время в формате Час Мин Дат Мес Год, и после этого записывать в файл я начинаю делать так :)

int run_clock_options(){
	struct tm *ptr;
	char *msg, *temp;
	int file_n, position = 21, min;
	unsigned short int key;
	
	time_t lt = time(NULL);
	ptr = localtime(&lt);
	file_n = open("/home/user/time",O_WRONLY);
	if (file_n ==-1){
		printf("Не удаеться открыть файл");
	}
	itoa(ptr->tm_min,min,2);

	write(file_n, /*itoa*/, 2);
	close(file_n);

	return 0;
}

но что-то мой компилятор не хочет брать itoa.. как это реализовать?

Ответ на: комментарий от strangeman

[code]/usr/include/unistd.h:363:16: note: expected ‘const void *’ but argument is of type ‘int’ /tmp/cckPpjyV.o: In function `run_clock_options': run_clock_options.c:(.text+0x294): undefined reference to `itoa' collect2: ld returned 1 exit status[/code]

Mish_ka
() автор топика

struct tm *ptr; заменить на struct tm ptr;

struct tm ptr = *localtime(&now);

man:

The return value points to a statically allocated struct which might be overwritten by subsequent calls to any of the  date  and  time  functions.

И еще есть удобная функция strftime

Eddy_Em ☆☆☆☆☆
()

min должен быть байтовым массивом

char * itoa ( int value, char * str, int base );

RA
()

char *res=itoa(ptr->tm_min,min,2);

write(file_n, res, 2);

RA
()
Ответ на: комментарий от RA

Не существует:

grep -r itoa /usr/include/*
/usr/include/lcms.h:#ifndef itoa
/usr/include/lcms.h:#       define itoa   _itoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_itoa        itoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_itoa(value, string, radix)	SDL_ltoa((long)value, string, radix)
/usr/include/SDL/SDL_stdinc.h:#define SDL_uitoa       _uitoa
/usr/include/SDL/SDL_stdinc.h:#define SDL_uitoa(value, string, radix)	SDL_ultoa((long)value, string, radix)

Eddy_Em ☆☆☆☆☆
()

но что-то мой компилятор не хочет брать itoa.. как это реализовать?

а snprintf чем не устраивает?

Reset ★★★★★
()
Ответ на: комментарий от Eddy_Em

Если уж на то пошло, то твое исправление ничем не поможет. Если такая проблема в программе действительно существует (что по коду не очевидно), то надо использовать localtime_r

Reset ★★★★★
()
Ответ на: комментарий от RA

itoa

конвертирует int в строку

$  man itoa
Нет справочной страницы для itoa
geekless ★★
()
Ответ на: комментарий от Reset

Тогда что это делает на ЛОРе?

И вообще ведь sprintf есть, а для работы с временем - strftime.

Похоже, все-таки ТС в мастдае сидит, раз команду man набрать не может.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от strangeman

если а масдае юзай _strdate _strtime

anonymous
()
Ответ на: комментарий от Reset

Спасибо за функцию :) с ней все у меня получилось :)

Теперь мне необходимо изменять системное время в процессе выполнения своей программы..

Вроде как функция stime, но примера реализации нормального не нашел =(

Mish_ka
() автор топика
Ответ на: комментарий от Mish_ka

> примера реализации нормального не нашел =(

Исходники date из coreutil сойдут в качестве примера?

geekless ★★
()

Как-то нехорошо строка min объявляется. Совсем уж не хорошо.

Roland
()
Ответ на: комментарий от Reset

>а snprintf чем не устраивает?

Разве sprintf умеет записать int в двоичной системе?

Roland
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.