Все программу прислать не смогу.
Вот выдержки из модуля сохранения:
....
void saveModule::createNewADCFile(quint16 _depthRecursion) // Создание нового файла
{
if(_depthRecursion > 100)
{
fdADC = -1;
emit RegistrationChange();
}
char* filePath = ((tr("%1/%2/%3.csv").arg(mountPoint).arg(ReportName).arg(fADCcounter))).toLocal8Bit().data(); //адрес файла
bool fileExists = QFile::exists(QString(filePath));
fdADC = -1; //Файловый дескриптор для порта
//открыть порт
fdADC = open(filePath, O_WRONLY | O_CREAT | O_APPEND , S_IRWXU);
// дальше идет НЕ говнокод. нужно просто призадуматься...
// хотя нет, все-таки говнокод
if ((fdADC == -1))
{
if(externalDev)
{
mountPoint = SYSREPORTPATH;
externalDev = false;
}
if (createDirTree(mountPoint, ReportName))
{
fADCcounter++;
saveADCCounter();
createNewADCFile(_depthRecursion+1);
}
else
{
emit RegistrationChange();
}
}
else
{
if (!fileExists)
{
printfADCHead();
fdatasync(fdADC);
}
emit RegistrationChange();
}
ChannelCount = 0;
OneLine = tr("");
}
void saveModule::closeADCFile(void) // Закрытие файла
{
fdatasync(fdADC);
close(fdADC);
sync();//<<
system(QString("echo \"1\" > /proc/sys/vm/drop_caches").toLocal8Bit().data()); //<<
fdADC = -1;
}
.....
int saveModule::getFreeSpacePrc(void) // Проверка и очистка места на диске
{
if (fdADC == -1)
{
return -1;
}
struct statvfs diskFree; //<<
fstatvfs (fdADC, &diskFree);
int free = int(diskFree.f_bavail); //<<
int total = int(diskFree.f_blocks);
int Prc = (free * 100) / total;
///Удаляем старые файлы и отчеты, при заполнении внутренней памяти
if ((Prc < 5) && (!externalDev))
{
QDir reportPath(SYSREPORTPATH);
QStringList allRepots = reportPath.entryList(QDir::Dirs|QDir::NoDotAndDotDot,QDir::Time|QDir::Reversed);
QStringList allFilesInReport;
if (allRepots.count() > 0)
do {
reportPath.cd("./" + allRepots.at(0));
allFilesInReport = reportPath.entryList(QDir::Files|QDir::NoDotAndDotDot,QDir::Time|QDir::Reversed);
if(allFilesInReport.count() > 0)
{
QFile(reportPath.path() + "/" + allFilesInReport.at(0)).remove();
allFilesInReport.removeFirst();
}
reportPath.cdUp();
if(allFilesInReport.count() == 0)
{
reportPath.rmdir(allRepots.at(0));
allRepots.removeFirst();
}
fstatvfs(fdADC, &diskFree); //<<
free = int(diskFree.f_bavail); //<<
total = int(diskFree.f_blocks);
Prc = (free*100)/total;
} while ((Prc < 5) && (allRepots.count() > 0)); //Пока пямять занята и еще есть, что удалять
}
if (Prc > 100) return -1;
return Prc;
}