|
Логирование данных в файл. |
|
|
|
 |
Ответов
|
Mar 20 2018, 10:12
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Если подвести итог вышесказанному получиться что то такое Код FILE *g_log_fp; int g_log_file_size;
void LOG_LogMessage(char *file, char *message, int value, int close) { int file_size = 0; char buff[256] = { '\0' }; char sval[10]; ItoA(value, sval); strcat(buff, message); strcat(buff, sval);
if (g_log_fp == NULL) { g_log_fp = fopen(file, "a+"); if (g_log_fp != NULL) fputs(buff, g_log_fp); } else fputs(buff, g_log_fp); fseek(g_log_fp, 0, SEEK_SET); fseek(g_log_fp, 0, SEEK_END); file_size = ftell(g_log_fp); if (close) fclose(g_log_fp); else fflush(g_log_fp); if (file_size >= MAX_LOG_FILE_SIZE) { //LOG_Clear() ??? //go to the next file ??? } } или я что то упустил в логике? или через очередь ? Код char log_buffer[1024]; MSG_Q_ID log_messages_Q;
void LOG_Init(void) { log_messages_Q = msgQCreate(100, 1024, 0); }
void LOG_SengQ(char *message, int value) { int size = strlen(message) + 4; //4 - for value char sval[10]; log_buffer[0] = '\0'; ItoA(value, sval); strcat(log_buffer, message); strcat(log_buffer, sval); msgQSend(log_messages_Q, log_buffer, size, NO_WAIT, MSG_PRI_NORMAL); } и потом в отдельном потоке msgQReceive(log_messages_Q, log_buffer, 1024, NO_WAIT); ? я не думаю что очередь дает какие то преимущества.
Сообщение отредактировал Jenya7 - Mar 20 2018, 10:29
|
|
|
|
|
Mar 20 2018, 11:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Jenya7 @ Mar 20 2018, 13:12)  Код char buff[256] = { '\0' }; strcat(buff, message); strcat(buff, sval); Что, 255 байт хватит всем? Никогда не используйте функции, не контролирующие выход за границу буфера. Используйте strncat, уж если на то пошло. Или strlcat.
|
|
|
|
|
Mar 20 2018, 12:01
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(andrew_b @ Mar 20 2018, 16:25)  Что, 255 байт хватит всем? Никогда не используйте функции, не контролирующие выход за границу буфера. Используйте strncat, уж если на то пошло. Или strlcat. IAR давал мне возможность Код int size = strlen(message); char buff[size ] = { '\0' }; в vxWorks я такую возможность не нашел вот и извращаюсь. динамическую алокацию отвергаю по возможности.
Сообщение отредактировал Jenya7 - Mar 20 2018, 12:11
|
|
|
|
|
Mar 20 2018, 12:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Jenya7 @ Mar 20 2018, 15:01)  IAR давла мне возможность Код int size = strlen(message); char buff[size ] = { '\0' }; в vxWorks я такую возможность не нашел Это C99 как минимум. Цитата вот и извращаюсь. динамическую алокацию отвергаю по возможности. Вы не поняли. Если вы выделили под сообщение буфер определённого размера, то strncat не позволит выйти за границу буфера. Она просто обрежет сообщение по длине.
|
|
|
|
Сообщений в этой теме
Jenya7 Логирование данных в файл. Mar 20 2018, 09:02 RobFPGA Приветствую!
Цитата(Jenya7 @ Mar 20 2018,... Mar 20 2018, 09:43 HardEgor Цитата(Jenya7 @ Mar 20 2018, 16:02) Сейча... Mar 20 2018, 09:48 haker_fox QUOTE (Jenya7 @ Mar 20 2018, 17:02) 1. Пр... Mar 20 2018, 10:01     Jenya7 Цитата(jcxz @ Mar 20 2018, 17:21) IAR име... Mar 20 2018, 12:24 haker_fox QUOTE (Jenya7 @ Mar 20 2018, 18:12) я не ... Mar 20 2018, 13:02  RobFPGA Приветствую!
Цитата(haker_fox @ Mar 20 20... Mar 20 2018, 13:08   jcxz Цитата(RobFPGA @ Mar 20 2018, 15:08) логр... Mar 20 2018, 13:15    RobFPGA Приветствую!
Цитата(jcxz @ Mar 20 2018, ... Mar 20 2018, 13:30     jcxz Цитата(RobFPGA @ Mar 20 2018, 15:30) Вобщ... Mar 20 2018, 15:10      RobFPGA Приветствую!
Цитата(jcxz @ Mar 20 2018, 1... Mar 20 2018, 15:30       jcxz Цитата(RobFPGA @ Mar 20 2018, 17:30) Но е... Mar 20 2018, 15:57        RobFPGA Приветствую!
Цитата(jcxz @ Mar 20 2018, ... Mar 20 2018, 16:56 AlexandrY Цитата(Jenya7 @ Mar 20 2018, 11:02) Как в... Mar 20 2018, 10:40 Jenya7 Цитата(AlexandrY @ Mar 20 2018, 15:40) Я ... Mar 20 2018, 10:50  jcxz Цитата(Jenya7 @ Mar 20 2018, 12:50) так в... Mar 20 2018, 12:00   Jenya7 Цитата(jcxz @ Mar 20 2018, 17:00) Если у ... Mar 20 2018, 12:14    jcxz Цитата(Jenya7 @ Mar 20 2018, 14:14) у мен... Mar 20 2018, 12:28     Jenya7 Цитата(jcxz @ Mar 20 2018, 17:24) Как тут... Mar 20 2018, 12:31      jcxz Цитата(Jenya7 @ Mar 20 2018, 14:30) а я в... Mar 20 2018, 12:38       Jenya7 Цитата(jcxz @ Mar 20 2018, 17:38) Я не зн... Mar 20 2018, 12:53        jcxz Цитата(Jenya7 @ Mar 20 2018, 14:53) но в ... Mar 20 2018, 12:59 k155la3 Цитата(Jenya7 @ Mar 20 2018, 12:02) У мен... Mar 20 2018, 12:13 haker_fox QUOTE (jcxz @ Mar 20 2018, 21:15) Заказан... Mar 21 2018, 01:43 AlexandrY Цитата(haker_fox @ Mar 21 2018, 03:43) Оп... Mar 21 2018, 05:51 jcxz Цитата(haker_fox @ Mar 21 2018, 03:43) Оп... Mar 21 2018, 08:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|