Добрый день всем! Я в Linux совсем новенькая, но мне дали задание по переносу кода с Win на Linux. Есть некая часть платформенно-зависимого кода. Хотелось бы, чтобы коллеги помогли, а то не знаю, куда копать. Надеюсь, что здесь есть люди, которые и в винде понимают и помогут перенести. Есть некий набор классов, которые мне нужно переписать под Linux.
1. Есть, например, класс CString (строка соответственно), но там везде используется TCHAR. Вопрос - есть ли под Linux какой-то подобный тип или нужно тупо самой его вводить?
#ifndef _TCHAR_DEFINED #if !__STDC__ typedef wchar_t TCHAR; #endif #define _TCHAR_DEFINED #endif
2. Также в коде используется макрос ASSERT из MFC. Я так понимаю, что его можно заменить на assert из CRT? Еще используется VERIFY из MFC. Тоже вопрос, чем его можно заменить? Аналогии в CRT что-то не вижу.
3. Есть ли в Linux аналог GetModuleFileName (известен HANDLE)?
4. va_list и иже с ним, я так понимаю, имеются?
5. Есть класс CMutex, который на самом деле внутри виндовая критическая секция. Соответственно, вопрос, есть ли в Linux аналог InitializeCriticalSection, DeleteCriticalSection, EnterCriticalSection, LeaveCriticalSection, TryEnterCriticalSection, структуры CRITICAL_SECTION? Желательно, без posix обойтись, если можно. До меня дошли слухи, что можно и без него.
6. Есть ли аналог MessageBox, CreateFile, CloseHandle, WriteFile, ReadFile, GetFileSize, SetFilePointer, MultiByteToWideChar (CP_ACP), WideCharToMultiByte, GetLocalTime?
7. Есть ли аналог ресурсов в файле, как в винде? И соответствено есть ли аналоги функций для работы с ресурсами FindResourceEx, SizeofResource, LoadResource, LockResource?
8. Есть ли аналоги QueryPerformanceCounter? Есть такой класс таймера - там этот вызов активно используется:
__int64 CTimer::m_frequency = CRLTimer::Init();
void CTimer::Start() { VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&m_tStart)!=0); }
void CTimer::Stop() { VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&m_tTime)!=0); m_tTime -= m_tStart; }
double CTimer::GetElapsedSeconds() { __int64 tTime; VERIFY(::QueryPerformanceCounter((LARGE_INTEGER*)&tTime)!=0); tTime -= m_tStart; return ((double)tTime/m_frequency); }
__int64 CTimer::Init() { VERIFY(::QueryPerformanceFrequency((LARGE_INTEGER*)&m_frequency)!=0); return m_frequency; }
Или, может, есть идеи, как его еще переписать, если в Linux нет чего-то подобного счетчикам производительности?
9. Есть ли вызовы, подобные InterlockedIncrement, InterlockedDecrement, lstrlen, функция типа _tcschr и иже с ними _t*?