Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
У меня по всему коду разбросанны сообщения типа printf ("LIB ID = %d\n", lib_id); сообщения выводятся серийно на терминал. Сейчас нужно некоторые сообщения логировать в файл на SD карте. Возникли вопросы по алгоритмике логирования данных 1. Прежде всего проверить есть ли место на SD - вопрос как это сделать? и если нет места? очистить файл и начать писать сначала? 2. Если файл открыт - добавить данные в файл, посмотреть флаг закрыть файл или нет.(я не хочу часто дергать файл - открывать\закрывать) тогда что - держать глобальный указатель на файл? 3.Если файл закрыт - открыть с опцией "а+", добавить данные в файл, посмотреть флаг закрыть файл или нет. Как вообще сделать покрасивше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 12:30 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7если нет места? очистить файл и начать писать сначала?Сообщить о недостатке места и завершить работу или запросить новое местоположение лога. Нельзя уничтожать чужие данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 12:34 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7У меня по всему коду разбросанны сообщения типа printf ("LIB ID = %d\n", lib_id); сообщения выводятся серийно на терминал. Сейчас нужно некоторые сообщения логировать в файл на SD карте. Возникли вопросы по алгоритмике логирования данных 1. Прежде всего проверить есть ли место на SD - вопрос как это сделать? и если нет места? очистить файл и начать писать сначала? Рекомендую периодически начинать новый файл, а старый переименовывать. Например при достижении какого-то размера. Что делать со старыми тебе видней, если старая инфа неинтересна, то можно удалять через какое-то время. jenya72. Если файл открыт - добавить данные в файл, посмотреть флаг закрыть файл или нет.(я не хочу часто дергать файл - открывать\закрывать) тогда что - держать глобальный указатель на файл? ИМХО лучше функцию отдельную сделать и там всю логику прописать Код: sql 1. 2. 3. 4. jenya73.Если файл закрыт - открыть с опцией "а+", добавить данные в файл, посмотреть флаг закрыть файл или нет. Как вообще сделать покрасивше? Если файл не закрываешь, то обязательно fflush() после записи, т.к. иначе при вылете проги часть лога может остаться в буфере ОС и не запишется на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 12:54 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7У меня по всему коду разбросанны сообщения типа printf ("LIB ID = %d\n", lib_id); сообщения выводятся серийно на терминал. Сейчас нужно некоторые сообщения логировать в файл на SD карте. Возникли вопросы по алгоритмике логирования данных 1. Прежде всего проверить есть ли место на SD - вопрос как это сделать? и если нет места? очистить файл и начать писать сначала? Рекомендую периодически начинать новый файл, а старый переименовывать. Например при достижении какого-то размера. Что делать со старыми тебе видней, если старая инфа неинтересна, то можно удалять через какое-то время. jenya72. Если файл открыт - добавить данные в файл, посмотреть флаг закрыть файл или нет.(я не хочу часто дергать файл - открывать\закрывать) тогда что - держать глобальный указатель на файл? ИМХО лучше функцию отдельную сделать и там всю логику прописать Код: sql 1. 2. 3. 4. jenya73.Если файл закрыт - открыть с опцией "а+", добавить данные в файл, посмотреть флаг закрыть файл или нет. Как вообще сделать покрасивше? Если файл не закрываешь, то обязательно fflush() после записи, т.к. иначе при вылете проги часть лога может остаться в буфере ОС и не запишется на диск. Что то вроде этого? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 13:37 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Делай переменное количество параметров, как у printf(). Пример тут http://www.cplusplus.com/reference/cstdio/vsprintf/?kw=vsprintf И не надо fseek(). Ты же знаешь размер добавляемого. При открытии посчитай текущий размер, а дальше к нему добавляй размер записанного и 1-2 байта на перевод строки. Передавать имя файла в параметрах тоже не очень хорошая идея. Сделай глобальную переменную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 13:46 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Не особо свежее, но готовое - zlog . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 13:51 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНе особо свежее, но готовое - zlog . фига се! там же монстр! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:01 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Dima TДелай переменное количество параметров, как у printf(). Пример тут http://www.cplusplus.com/reference/cstdio/vsprintf/?kw=vsprintf И не надо fseek(). Ты же знаешь размер добавляемого. При открытии посчитай текущий размер, а дальше к нему добавляй размер записанного и 1-2 байта на перевод строки. Передавать имя файла в параметрах тоже не очень хорошая идея. Сделай глобальную переменную. Пока что получилось такое Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:26 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Dima TДелай переменное количество параметров, как у printf(). Пример тут http://www.cplusplus.com/reference/cstdio/vsprintf/?kw=vsprintf. Придется делать парсинг формата как в printf() а это уже через чур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:42 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Лучше проверку в начало Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ИМХО close не надо постоянно передавать, лучше сделай отдельно LOG_Close() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:49 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7Dima TДелай переменное количество параметров, как у printf(). Пример тут http://www.cplusplus.com/reference/cstdio/vsprintf/?kw=vsprintf. Придется делать парсинг формата как в printf() а это уже через чур. Что в этом сложного? По ссылке пример как это делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:51 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Не забывайте при каждой записи в лог-файл сперва писать в начале строки текущую дату и время. Весьма полезно. Я всегда так делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:58 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7пропущено... Придется делать парсинг формата как в printf() а это уже через чур. Что в этом сложного? По ссылке пример как это делается. аю я понял. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:59 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
d7iНе забывайте при каждой записи в лог-файл сперва писать в начале строки текущую дату и время. Весьма полезно. Я всегда так делаю. у меня с этим возникла проблема. не знаю как инициализировать начальную дату. у меня есть счетчик милисекунд. полноценного RTC нет. ну я тут накропал что то вроде Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:11 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7у меня есть счетчик милисекунд. полноценного RTC нет Date and Time on the Internet: Timestamps . Прочитать надо всё, а примеры кода - в приложениях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:19 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, это эмбедед система. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:55 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7это эмбедед система.Тогда не парьтесь и либо выводить миллисекунды аптайма или загрубляйте до секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 16:07 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7, а что VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // address of system time structure ); уже отменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 17:33 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
d7ijenya7, а что VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // address of system time structure ); уже отменили? у меня такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 17:52 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7d7ijenya7, а что VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // address of system time structure ); уже отменили? у меня такого нет. Вы пишите не для Windows? Ну, всё равно должна же быть какая-то функция для получения системной даты и времени? В любой ОС (API, библиотеки) такие есть. Поищите внимательней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 18:24 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
d7ijenya7пропущено... у меня такого нет. Вы пишите не для Windows? Ну, всё равно должна же быть какая-то функция для получения системной даты и времени? В любой ОС (API, библиотеки) такие есть. Поищите внимательней. стал бы я писать под Windows на С? Я что больной на голову? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 18:50 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7стал бы я писать под Windows на С? Я что больной на голову? :) Хм, это для холодильника что ли? Поясните уж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 19:18 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
d7ijenya7стал бы я писать под Windows на С? Я что больной на голову? :) Хм, это для холодильника что ли? Поясните уж... это эмбедед система. контролер. vxWorks. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 19:32 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya7, ну так, как советовали выше, не парьтесь с датой, посчитайте что сможете (число дней, время и т.п.). Главное, чтобы можно было как-то идентифицировать временной промежуток между разными строками лога... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 19:46 |
|
||
|
Логирование данных в файл на С.
|
|||
|---|---|---|---|
|
#18+
jenya71. Прежде всего проверить есть ли место на SD - вопрос как это сделать? и если нет места? очистить файл и начать писать сначала? Поскольку это embed то надо смотреть в сторону ваших embed-нутых библиотек на C. Я не знаю.. ну может по требованиям подойдет log4c или нечто подобное. В классике логгирования держат пул файлов в ротации. Например 5 штук по 20Мб. Пишут по кругу. Достаточно для разбора полетов если что-то упало. 2. Если файл открыт - добавить данные в файл, посмотреть флаг закрыть файл или нет.(я не хочу часто дергать файл - открывать\закрывать) Это вопрос больше дизайна чем перформанса. Я думаю что для С на SD носителе и на хорошей файловой системе типа (ext3) открытие файла будет очень быстрым. Ну.. яб попробовал. тогда что - держать глобальный указатель на файл? 3.Если файл закрыт - открыть с опцией "а+", добавить данные в файл, посмотреть флаг закрыть файл или нет. Как вообще сделать покрасивше? Тут надо просто пойти от самого приложения. Если ему доступны глобальные переменные - то почему нет. Есть мультипоточность или нет. Поддерживаются ли файловые блокировки или нет. Вобщем сделать несколько проб. И соптимизировать место. По сути вам не нужно писать текст месседжа. Достаточно его код и атрибуты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 22:24 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39617654&tid=1340149]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 278ms |

| 0 / 0 |
