검색결과 리스트
프로그래밍 일반에 해당되는 글 43건
- 2013.08.23 그주의 특정 요일 날짜를 알아내기
- 2013.07.08 윈도우 배치파일 문법 정리
- 2013.06.05 enum 간단한 코드로 의미있는 에러코드 출력하기
- 2013.06.05 MFC 함수를 이용해서 간단히 서브스트링 얻기
- 2013.06.05 실행파일 커맨드 라인 받기
- 2013.03.11 telnet 사용 방법
- 2011.02.23 GetTextExtentPoint32
- 2011.02.23 IsDBCSLeadByte
- 2010.12.30 파일 존재 여부 확인
- 2010.12.13 동적 측면을 검증해 클래스 다이어그램 완성하기
글
그주의 특정 요일 날짜를 알아내기
날짜를 테이블 키로 사용하는 경우
Day of week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
원하는 날짜 = 현재시간 - 현재시간.GetDayOfWeek() + 원하는 요일 (Day of week)
예) 이벤트가 일주일에 한번 갱신되고 월요일에 시작한다. 금주는 주말을 포함한다.
// 일요일 처리
if ( current.GetDayOfWeek() == 1 ) {
COleDateTimeSpan span(6, 0, 0, 0);
monday = current - span;
}
else {
COleDateTimeSpan dayOfWeek(current.GetDayOfWeek(), 0, 0, 0);
COleDateTimeSpan spanMonday(2, 0, 0, 0);
monday = current - dayOfWeek + spanMonday;
}
설정
트랙백
댓글
글
윈도우 배치파일 문법 정리
%CD%를 하면 현재 작업 경로를 얻을 수 있다.
@REM 현재 경로 저장
SET CurrentPath=%CD%
@REM 경로 이동
CD D:\DEV\Server
...코드
@REM 이전 경로로 복귀
CD %CurrentPath%
- 파일 복사
COPY
- 파일 이름을 변경한다.
RENAME [드라이브:][경로]파일이름1 파일이름2.
REN [드라이브:][경로]파일이름1 파일이름2.
서버 재시작시에 기존 기존 로그를 분리하는 등의 용도로 사용 가능
예)
REN LoginError.log %date%_%time:~0,2%_%time:~3,2%_%time:~6,2%_LoginError.log
exit /b 0
배치파일을 만들면서 느낀 팁만 남기도록 한다.
어차피 배치파일 명령어 사용법은 /? 키워드를 사용하여 주석을 확인하는게 가장 정확하고 배치파일을 처음 접할 때 한가지만
잊지 않으면 배치파일 명령어는 간단하다. 바로 우리가 파일로 작성한 배치파일은 단순한 cmd.exe 에서 파일을 읽어 명령어를 사용한다는 사실이다.
한 예로
@echo off
svn update . // 설정파일이 포함된 폴더의 svn을 업데이트하고
copy /Y Event.ini .. // 한단계 위로 파일 복사
copy /Y DurationEvent.ini ..
pause
배치 파일을 클릭해서 실행 시키면 해당 설정 폴더를 svn 업데이트하고 상위 폴더에 설정 설정파일들을 복사하는 배치 파일이 있다고하자.
d:\server\public\배치파일
서비스 중에 이벤트 정보를 변경할 필요가 생겼을 때 모든 서버마다 수작업으로 해당 배치파일을 클릭해서 실행 시켜야한다면 매우 비효율 적이기 때문에 마스터서버에서 특정 명령어를 보내면 게임서버가 해당 배치파일을 실행 시키는 명령어를 만들었다고 치자.
명령어를 받은 게임 서버는
::ShellExecute 등의 함수를 사용하여 배치파일을 실행 시키는데
이렇게되면 d:\server\.. 게임 서버의 모든 데이터가 update되고
d:\server\Event.ini 파일이 -> d:\Event.ini 복사된다.
위와 같은 결과는 cmd.exe 에서 실행되는 과정을 보면 당연하다고 볼 수 있다.
서버파일이 존재하고 있는 경로 D:\Server\.. 에서 배치파일이 실행되었기 때문에 svn 업데이트 명령이나 파일 복사도 우리가 의도하지 않는 결과를 만들었다.
그러면 어떻게 해결할 수 있을까?
위에서 이야기한 배치파일은 단순히 cmd.exe 에서 읽어들이는 명령어라고 생각하면 간단하다.
@echo off
cd public // d:\server\public\.. 경로 이동..
svn update . // d:\server\public\.. 원하는 폴더만 업데이트
copy /Y Event.ini .. // 업데이트된 파일 상위로 복사
copy /Y DurationEvent.ini ..
pause
배치파일을 작성할 때는 항상 도스창에서 실행되는 명령어를 작성한다고 생각하면 의외로 단순하다는 사실을 잊지 말자.
웹서버 리스타트 배치 명령어
@echo off
@REM appcmd.exe 폴더로 경로 이동
cd %windir%\system32\inetsrv
@REM 사이트 종료
appcmd stop site /site.name:"사이트명"
@REM 응용 프로그램 풀 종료
appcmd stop apppool /apppool.name:"풀명"
@REM 퍼포스 업데이트
@REM appcmd.exe 폴더로 경로 이동
cd %windir%\system32\inetsrv
@REM 사이트 시작
appcmd start site /site.name:"사이트명"
@REM 응용 프로그램 풀 종료
appcmd start apppool /apppool.name:"풀명"
설정
트랙백
댓글
글
enum 간단한 코드로 의미있는 에러코드 출력하기
프로그램이 실행되는 도중에 에러코드가 숫자로 출력되면 해당 에러코드가 어떤 의미인지 코드를 찾아봐야하는 번거로움이 있다.
디파인 함수를 잘 이용하면 단순한 코드로 해당 문제를 상당부분 해소할 수 있다.
샘플 코드
#define DO_TEXT(e) L#e,
#define DO_ENUM(e) e,
#define CRYPTO(NAME) \
NAME(ERROR_AUTH_SUCCESS) \
NAME(ERROR_AUTH_DECODING_FAILURE) \
NAME(ERROR_AUTH_TOKEN_IS_NOT_VALID)
enum eERROR_CJIJCRYPTO {
CRYPTO(DO_ENUM)
};
TCHAR* szError_CJIJCrypto[] = {
CRYPTO(DO_TEXT)
};
단점은 enum에 주석을 사용할 수 없는 없다는 점인데 의미있는 문자열을 사용하면 간단히 넘어갈 수 있는 문제이다.
설정
트랙백
댓글
글
MFC 함수를 이용해서 간단히 서브스트링 얻기
This global function can be used to extract a substring from a given source string.
BOOL AFXAPI AfxExtractSubString ( CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = '\n' ); |
샘플 코드
// The following example extracts a series of name, value pairs from a
// given source string:
// Input string consisting of a number of name, value pairs
LPCTSTR lpszSource = _T("\"Name\"=\"John Smith\"\n")
_T("\"Company\"=\"Contoso, Ltd\"\n\"Salary\"=\"25,000\"");
CString strNameValue; // an individual name, value pair
int i = 0; // substring index to extract
while (AfxExtractSubString(strNameValue, lpszSource, i))
{
// Prepare to move to the next substring
i++;
CString strName, strValue; // individual name and value elements
// Attempt to extract the name element from the pair
if (!AfxExtractSubString(strName, strNameValue, 0, _T('=')))
{
// Pass an error message to the debugger for display
OutputDebugString(_T("Error extracting name\r\n"));
continue;
}
// Attempt to extract the value element from the pair
if (!AfxExtractSubString(strValue, strNameValue, 1, _T('=')))
{
// Pass an error message to the debugger for display
OutputDebugString(_T("Error extracting value element\r\n"));
continue;
}
// Pass the name, value pair to the debugger for display
CString strOutput = strName + _T(" equals ") + strValue + _T("\r\n");
OutputDebugString(strOutput);
}
설정
트랙백
댓글
글
실행파일 커맨드 라인 받기
CommandLineToArgvW Function
Parses a Unicode command line string and returns an array of null-terminated Unicode strings. The strings contain the individual arguments found in that command line, and a count of arguments, similar to the standard C run-time argv and argc values.
Syntax
LPWSTR *CommandLineToArgvW(
LPCWSTR lpCmdLine, int *pNumArgs );
Example
The following example demonstrates how to parse a Unicode command-line string. The code frees the memory for the argument list at exit.
Hide Example
#include <windows.h> #include <stdio.h> #include <shellapi.h> int __cdecl main() { LPWSTR *szArglist; int nArgs; int i; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if( NULL == szArglist ) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } else for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]); // Free memory allocated for CommandLineToArgvW arguments. LocalFree(szArglist); return(1); }
설정
트랙백
댓글
글
telnet 사용 방법
특정 서버에 접근이 가능한지 확인해보는 간단한 방법으로 telnet 을 사용할 수가 있다.
telnet 설치 방법으로는
제어판 -> 프로그램 -> Windows 기능 사용/사용 안 함 -> telnet 클라이언트 사용
명령어
cmd 창에서
telnet 아이피 포트
접근이 허용된다면 화면이 바뀌고 커서가 깜빡인다.
접근이 불가능할 때는 접근 불가 메시지 출력!!
해외 서비스 시에 특정 서버에 접근 가능한지 확인해보는 가장 간단한 방법이다!!
설정
트랙백
댓글
글
GetTextExtentPoint32
글자의 가로, 세로 크기를 얻을 때 유용하다.
호출전에 반드시 SelectObject를 사용해서 폰트를 dc에 설정한 후 사용해야 한다.
설정
트랙백
댓글
글
IsDBCSLeadByte
멀티바이트를 구성하는 바이트가 2바이트를 구성하는 바이트의 첫번째 바이트인지 판단해서 true 리턴.
단순히 아스키코드 값이 127보다 큰지 작은지 알려주기 때문에 한글을 확인할 때는 2바이트로 짝을 맞추어서 확인하자.
설정
트랙백
댓글
글
파일 존재 여부 확인
int _access( const char* path, int mode )
- parameters
psth
File or directory path.
mode
Read/write attribute.
- header
<io.h>
리턴값은 msdn과 일치하지 않는 듯하다. 실패시 -1을 리턴한다.
폴더와 파일 모두 확인하기 때문에 GetFileAttributes 함수와 같이 사용하면 좋을 듯, 아미녀 속성 검사 함수만 사용해도 되고..
DWORD GetFileAttributes( LPCTSTR lpFileName )
FILE_ATTRIBUTE_DIRECTORY 파일 속성이 폴더인 경우
설정
트랙백
댓글
글
동적 측면을 검증해 클래스 다이어그램 완성하기
모델링은 정적인 측면, 동적인 측면, 기능적인 측면에서 검증한 후, 클래스 다이어그램을 수정할 필요가 있다.
정적인 측면에서 모델링한 것만으로는 모델링이 불충분한 이유는 시스템이 동작할 때에는 클래스 다이어그램에 표시된 클래스의
오브젝트가 생성되거나, 서로 협조하면서 변화 또는 소멸하는 동적인 변화가 있기 때문이다. 이 동적인 변화를 정적 모델에 작성된 클래스의 속성이나 조작의 조합에 의해 의도한 대로 다룰 수 있다는 것을 검증해야만 한다. 이것을 통과하지 못한 정적 모델은 가설적인 개념에 지나지 않으며, 시스템을 만들어도 제대로 동작한다는 보장이 없다.
RECENT COMMENT