fopen(LOG_PATH, "wb");
fwrite(data, sizeof(char), strlen(data), fp);
fclose(fp);
}
int main()
{
logi("уюцжцжужадаба wkqkskxk 10129");
return 0;
}
Здесь не будет UB? strlen и char* совместимы?
strlen и char* совместимы?
тяжолый случай
Я знаю что это очень плохой способ логирования, но так надо
В чем заключается минус такого логирования?
Если программа асинхронная, то минус только в ожидании записи лога. А если есть потоки, то это будет очень узким горлышком
И как исправить такое? Я не понял
fopen и fclose - это дорогие операции, особенно если в системе не хватает хендлеров, может статься так, что fp вернет 0, а ты нигде не определяешь такое. лучше конечно брать файл один раз, и возвращать один раз, в фай записывать стразу структуры логгирования с фиксированными полями, и делать копию области памяти откуда заполняется структура логгирования. ещё лучше воспользоваться mmf, в винде и в линуксе есть похожие методы, и писать сразу в файл без предварительного кэширования, воспринимая его как указатель на область памяти
Ну моя идея - буфер в памяти, и запись, вынесенная в отдельный поток чанками, потому что Ио операции блокируются. И, само собой, обработчик завершения программы, который весь буфер выгрузит
На изичах можна же в static закинуть
но лучше открыть файл один раз и держать открытым
Думаешь не стоит открывать и закрывать файл несколько раз?
не, потому что пока файл закрыт, его могут переместить, удалить, открыть в эксклюзивном режиме, с запретом на запись. вообще все что угодно
Обсуждают сегодня