示例#1
0
Storage::~Storage()
{
    CloseFileStream();
    uint i;
    for (i = 0; i < SEG_NUM; ++i)
    {
        delete []SegPage[i].PageTable;
    }
}
示例#2
0
void Storage::FM_FlushSegPage()
{
    CloseFileStream();
    OpenFileStream();
    WriteToFile('m', META_HEAD_SIZE, &DataPageNum, sizeof(DataPageNum));
    WriteToFile('m', META_HEAD_SIZE+sizeof(DataPageNum), SegPage, sizeof(SegPage));
    uint i, pos = META_HEAD_SIZE + sizeof(DataPageNum) + sizeof(SegPage);
    for (i = 0; i < SEG_NUM; ++i)
    {
        WriteToFile('m', pos, SegPage[i].PageTable, sizeof(PageTabItem)*SegPage[i].PageTableLength);
        pos += sizeof(PageTabItem)*SegPage[i].PageTableLength;
    }
    WriteToFile('m', pos, &p, sizeof(Addr));
}
示例#3
0
void Storage::Create()
{
    memset(SegPage, 0, sizeof(SegPage));
    memset(Buffer, 0, sizeof(Buffer));
    memset(FastTables, 0, sizeof(FastTables));
    uint i;
    for (i = 0; i < SEG_NUM; ++i)
    {
        SegPage[i].PageTable = new PageTabItem[INIT_PAGE_TAB_LEN];
        SegPage[i].PageTableLength = INIT_PAGE_TAB_LEN;
        SegPage[i].Used = true;
    }
    FILE *meta = fopen(this->MetaPath, "wb");
    FILE *data = fopen(this->DataPath, "wb");
    fseek(meta, META_HEAD_SIZE, SEEK_SET);
    fclose(meta);
    fclose(data);
    CloseFileStream();
    OpenFileStream();
}
示例#4
0
void Storage::FM_LoadSegPage()
{
    CloseFileStream();
    OpenFileStream();
    uint i;
    for (i = 0; i < SEG_NUM; ++i)
    {
        if (SegPage[i].PageTable != NULL)
        {
            delete []SegPage[i].PageTable;
        }
    }
    ReadFrmFile('m', META_HEAD_SIZE, &DataPageNum, sizeof(DataPageNum));
    ReadFrmFile('m', META_HEAD_SIZE+sizeof(DataPageNum), SegPage, sizeof(SegPage));
    uint pos = META_HEAD_SIZE + sizeof(DataPageNum) + sizeof(SegPage);
    for (i = 0; i < SEG_NUM; ++i)
    {
        SegPage[i].Used = true;
        SegPage[i].PageTable = new PageTabItem[SegPage[i].PageTableLength];
        ReadFrmFile('m', pos, SegPage[i].PageTable, sizeof(PageTabItem)*SegPage[i].PageTableLength);
        pos += sizeof(PageTabItem)*SegPage[i].PageTableLength;
    }
    ReadFrmFile('m', pos, &p, sizeof(Addr));
}
示例#5
0
文件: wav.cpp 项目: tatt61880/kuin
static void Close(void* handle)
{
	SWav* handle2 = reinterpret_cast<SWav*>(handle);
	CloseFileStream(handle2->FileStream);
	FreeMem(handle2);
}
示例#6
0
int Init(RecorderProperties *ws, wstring name) {

	ws->pLoc = NULL;
	ws->pSvc = NULL;
	ws->treminateFlag = false;

	//recoder logs initialisation

	ws->parameters.name = name;
	wstring preLog = AppPath() + L"\\SDRpreinit_" + name + L"rec.log";
	OpenFileStream(ws->logStream, preLog);
	SetDefaultLog(ws->logStream);
	pugi::xml_document config;

	if (int initConfigResult = InitConfig(config) != status_ok) {
		return initConfigResult;
	}

	wstring recorderXpath = L"/sdr/recording/recorders/sdrd[@name='"
			+ ws->parameters.name + L"']";
	pugi::xml_node recorderConfigNode = config.select_single_node(
			recorderXpath.data()).node();

	if ((ws->parameters.interval =
			recorderConfigNode.attribute(L"interval").as_int()) == 0
			&& ws->parameters.interval <= 1) {
		ws->parameters.interval = 60;
	}

	if ((ws->parameters.countTotal =
			recorderConfigNode.attribute(L"count").as_int()) == 0
			&& ws->parameters.countTotal < -1) {
		ws->parameters.countTotal = -1;
	}

	//for archive testing
	if ((ws->parameters.archiveInterval = recorderConfigNode.attribute(
			L"archiveat").as_int()) == 0)
		ws->parameters.archiveInterval = -1;

	wstring apppath = AppPath();
	ws->parameters.rawCurrentPath =
			apppath
					+ config.select_single_node(L"/sdr/recording/logs/current").node().attribute(
							L"path").as_string();
	if (ws->parameters.rawCurrentPath.empty()) {
		WriteFileLogf(L"Failed to init configuration, code here:");
		return status_config_file_not_found;
	}

	ws->parameters.logDailyPath =
			apppath
					+ config.select_single_node(L"/sdr/recording/logs/daily").node().attribute(
							L"path").as_string();
	if (ws->parameters.logDailyPath.empty()) {
		WriteFileLogf(L"Failed to init configuration, code here:");
		return status_config_file_not_found;

	}

	ws->sysLogPath = ws->parameters.rawCurrentPath + ws->parameters.name
			+ L"rec.log";
	//ws->parameters.rawCurrentFile = ws->parameters.rawCurrentPath;
	ws->parameters.rawCurrentFile += ws->parameters.name + L"rec.sdrd";

	OpenFileStream(ws->rawStream,
			ws->parameters.rawCurrentPath + ws->parameters.rawCurrentFile);
	CloseFileStream(ws->logStream);

	DeleteFile(preLog.data());

	OpenFileStream(ws->logStream, ws->sysLogPath);
	SetDefaultLog(ws->logStream);
	WriteFileLogf(L"Starting recorder " + ws->parameters.name + L"rec.");
	return status_ok;
}
示例#7
0
int ArchiveFileRaw(RecorderProperties *ws, bool sender) {

	if (CloseFileStream(ws->rawStream) != status_ok) {
		return status_io_error;
	}
	if (CloseFileStream(ws->logStream) != status_ok) {
		return status_io_error;
	}

	time_t now_local = time(NULL);

	struct tm lt;

	now_local -= 3600; //prev day
	localtime_s(&lt, &now_local);

	wchar_t szBuf[MAX_PATH];
	_snwprintf(szBuf, MAX_PATH, L"%d-%02d-%02d\\", lt.tm_year + 1900,
			lt.tm_mon + 1, lt.tm_mday);
	wstring todayFolder = ws->parameters.logDailyPath + szBuf;

	CreateDirectory(todayFolder.data(), 0);
	HZIP todayZip;
	ZRESULT zipResult;
	//ziping raw
	if (!sender) {
		wstring archiveRawFilePath = todayFolder + ws->parameters.rawCurrentFile
				+ L".zip";
		todayZip = CreateZip((void*) archiveRawFilePath.data(), 0,
		ZIP_FILENAME);
		zipResult = ZipAdd(todayZip, ws->parameters.rawCurrentFile.data(),
				(void*) (ws->parameters.rawCurrentPath
						+ ws->parameters.rawCurrentFile).data(), 0,
				ZIP_FILENAME);
		CloseZip(todayZip);
		if (zipResult != ZR_OK) {
			WriteFileLogf(L"Raw zip creation failed");
		}
	}

	//ziping log
	wstring archiveLogFilePath = todayFolder + ws->parameters.name + L"log.zip";
	todayZip = CreateZip((void*) archiveLogFilePath.data(), 0, ZIP_FILENAME);
	wstring logFile = wstring(ws->parameters.name + L"rec.log");
	zipResult = ZipAdd(todayZip, logFile.data(),
			(void*) (ws->parameters.rawCurrentPath + logFile).data(), 0,
			ZIP_FILENAME);
	CloseZip(todayZip);
	if (zipResult != ZR_OK) {
		WriteFileLogf(L"Log zip creation failed");
	}

	if (!sender
			&& OpenFileStream(ws->rawStream,
					ws->parameters.rawCurrentPath
							+ ws->parameters.rawCurrentFile, true)
					!= status_ok) {
		return status_io_error;
	}

	if (OpenFileStream(ws->logStream, ws->sysLogPath, true) != status_ok) {
		return status_io_error;
	}

	return status_ok;
}