정리

원격 데스크톱 Port 변경과 사용

저장소/잡다한거

아래의 레지스트리 정보를 수정 후 재부팅하면 끝!


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp

Value Name : PortNumber
Value Type : DWORD
Value : 0x00000d3d(3389)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

Value Name : PortNumber
Value Type : DWORD
Value : 0x00000d3d(3389)

Windows의 원격 데스크톱에서 사용하는 Port 번호는 3389로 정의되어있다.
바꾸고 싶은 Port 번호로 변경하고 재부팅하면 된다.
Windows 방화벽 문제로 안 될 수 있으니 예외에 변경한 Port 번호를 추가해주자.

원격지에서 붙을때에는 IP 뒤에 Port 번호를 지정해줘야 한다.
예) 123.45.67.89:8765

Byte Order Mark (BOM)

저장소/잡다한거

Byte Order Mark(BOM)

WikiPedia : http://en.wikipedia.org/wiki/Byte_order_mark


Encoding 

Byte Order Mark 

 ANSI

 (empty)

 UTF-8

 EF BB BF

 UTF-8(no BOM)

( empty)

 UTF-16 BE(Big Endian)

 FE FF

 UTF-16 LE(Little Endian)

 FF FE


[Win32] CreateFile로 Text파일을 처리할 때

저장소/VC++

Text 파일을 처리할 때 Unicode 문자열을 그냥 저장하고 싶을 때
CreateFile/WriteFile을 이용하여 그냥 마구마구 써버리면?
하아... 이게 왜이러지? 하는 생각이 마구마구 들 것이야. ㅋㅋ
또 까묵지 말고 기억해두자.

일단 Byte Order Mark(BOM)에 대해서 알아두자.
추가로 fopen의 대해서 알아두는 것도 도움이 될 것 같다.

CreateFile API에 대한 내용은 MSDN을 참고하자.
아래 내용과 관련된 이슈도 있으니까 참고하자.
(읽어보니 Windows NT 서버쪽에서 UNC 경로를 이용하여 처리할 때 벌어지는 문제라고 함.)

내용을 다 살펴봤으면 본론을 얘기하도록 하자.
fopen과 같이 ccs= 옵션이 없기 때문에 파일을 처음 생성할 때
BOM을 지정해줘야 원하는 인코딩 형식의 Text 파일을 만들 수 있다.

CreateFile을 사용할 때 flag를 OPEN_ALWAYS로 지정하면
파일이 없을 경우 파일을 새로 생성한다.
GetLastError 함수로 에러값을 확인해보면 파일이 새로 생성된 경우엔
0이 반환되지만 파일이 이미 있는 경우에는 ERROR_ALREADY_EXISTS(183L)이 반환된다.
이 내용은 MSDN에 있으니까 다시 확인해보자.
자... 어쨌든 이 방법을 이용하여 새로 생성됐는지의 여부를 판단하는 것이다.
새로 생성? 이 때가 기회다!!
원하는 인코딩 형식의 정보를 넣어주자.
예를들어 Unicode 프로젝트에서 Unicode 문자열을 그대로 넣고 싶다면
0xFF, 0xFE를 차례대로 Write해주자.

다른 인코딩도 BOM 정보를 확인하여 처리하면 된다.
만약 ANSI 인코딩을 원한다면 물론 문자열을 Multibyte로 변환해야 한다.
그런거다. 이게 전부다. 딴거 없다. 훗... 역시 기록을 해두면 나중에 편하다니까. ㅋㅋㅋ

'저장소 > VC++' 카테고리의 다른 글

[Win32 API] GetSystemTime과 GetLocalTime  (0) 2010.05.22
[C++] __stdcall, __cdecl 그리고 Calling Convention  (0) 2010.02.17
[Error/Warning] warning C4995  (0) 2009.09.23
[Win32] GetFileAttributes  (0) 2009.09.22
[C++] Calling Convention  (0) 2009.09.22

ftp 서버 운영과 뻘짓 크리;;

Linux
아... 일단 3시간 뻘짓;;;

1차 목표인 SVN 서버 운영을 위하여 뭘 해야하나 찾던 중 기본 중의 기본인 FTP 서버를 운용해야겠다는 생각이 번뜩!!!

책 보고 대략 2시간쯤...
아는 게 없으니 이것저것 확인해보고 따라해보고 하다보니 시간이 잘도 가는구나~ 에헤라디야~ @_@

책에서 vsftpd를 사용하기 전에 proftpd를 먼저 해보자고 하길래 부지런히 설치했다.
오옷~!! 오옷~!!
뭔가 되는구나!!!
FileZilla로 접속해보니 이것 또한 되는군.
와우!! 멋져부러~!!

그런데... 프로세스를 확인해보니 proftpd가 없네? 어라? 이거 뭐야? 뭥미?
한 20분 고민하다 친구에게 물어보니 실행이 안됐다고 한다.
얼래? 그럼 접속되는 건 뭐지?
FileZilla의 접속 메시지를 살펴보니... vsFTPd 2.xxx
이런... XXXXXX

일단 proftpd를 삭제!!!
이거 삭제하는데도 모르니까 한 15분... ㅡㅜ
분명 호스팅 제공 내용 보니까 OS 설치랑 APM RPM 버전 설치만 제공된다 했었는데...
호스팅의 기본인가?
하하하하... 담배 어디갔어?

일단 FTP 되니까 담에 알아보자. 귀찮다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

cafe24 가상서버 생성

Linux

아무것도 묻지도 따지지도 않고 결제했다. 하악하악~~ -_-
뭐가 뭔지 하나도 모르겠다.
일단 CentOS 5.X 라는군...
음... 이게 linux인 것도 모르고 일단 질렀다.

트래픽 월 100G, 디스크 용량 20G

음... 훌륭하도다! 가격은 나름 착한 것 같다.
비싼 것 같기도 하지만 담배 좀 줄이면야 이까이꺼... 아니구나... -_-;;

리눅스...
하아... 모르겠다. 결국 책까지 사고야 말았는데...
일단 열심히 하자.
돈이 아깝지 않게!!!

파일 또는 디렉토리 삭제

Linux

rm [옵션] 파일이름

옵션
-f : 삭제할 파일이 없을 경우 아무런 메시지를 보여주지 않고 그냥 넘어간다.
: 파일을 삭제할 것인지 사용자에게 물어본다.
-r, -R : 일반파일이면 그냥 지우고 디렉토리일 경우 그 하위경로와 파일을 모두 지운다.
-v : 삭제되는 파일의 정보를 보여준다.


디렉토리를 지울 때는 -r 옵션을 사용하면 편하다.
근데 이것이 파일을 삭제하라고 했는데도 자꾸 삭제할까요? 하고 물어본다. 한심한 녀석... -_-+
다시 -rf 옵션을 주고 사용하자.
그러면 물어보는 것 없이 깔끔히 지워준다.

tip)
지울 때는 항상 경로를 확인하자.
원하지 않는 곳을 묻지도 따지지도 않고 날려버리는 수가 있다. -0-;;

make로 설치한 프로그램 삭제

Linux

make install을 사용하여 설치한 프로그램은
그냥 삭제하면 된다고 한다.

./configure에 옵션으로 지정된 경로 또는 default에 지정된 경로를 삭제하면 된다고 하는데...
하하하하하하... 지우는 방법 한참 찾았네. ㅡㅜ


tip)
설치할 때는 어디에 설치되는지 메모해두자. 아님 기억하시던가 -_-;

'Linux' 카테고리의 다른 글

GUI 모드에서 CLI 모드로(run-level) 설정 변경하는 방법  (0) 2011.05.15
SVN 설치 및 운용  (0) 2010.04.23
ftp 서버 운영과 뻘짓 크리;;  (0) 2009.10.05
cafe24 가상서버 생성  (0) 2009.10.05
파일 또는 디렉토리 삭제  (0) 2009.10.05

[펌] 시스템이 부팅되는 동안 파일 시스템에서 일어나는 일

저장소/잡다한거

파일 시스템은 시스템의 부트 프로세스가 진행되는 동안 ( I/O 시스템 초기화 도중 ) 초기화 작업을 하게 됩니다.

I/O Manager는 global 파일 시스템 큐를 생성하고 OS Loader와 PnP Manager에 의해 로드된 파일 시스템과 필터 드라이버들을 초기화 합니다.

1. 시스템이 부트 하는 중,  로더가 커널에 제어 전송을 하기 전에 OS loader는 부트 파일 시스템과 RAW 파일 시스템 그리고  타입이 SERVICE_BOOT_START 인 모든 드라이버를 로드 합니다.

이 드라이버들은 커널이 제어권을 획득할 때 메모리에 있게 되죠.

2. I/O Manager는 global 파일 시스템 큐를 4개의 세그먼트로 생성하게 됩니다. 
( CD-ROM, disk, tape devices, network file system )
이 큐의 세그먼트에 따라서 나중에 파일 시스템이 등록되면, 컨트롤 디바이스 오브젝트들이 큐에 추가되게 됩니다.

3. PnP Manager가 RAW 파일 시스템과 모든 SERVICE_BOOT_START 드라이버의 DriverEntry 루틴을 호출합니다. 

PnP Manager는 부트 디바이스를 부트 디바이스 드라이버의 AddDevice 루틴을 호출함으로써 시작하게 합니다.
이 때 부트 디바이스가 자식 디바이스들을 소유하고 있다면 이 디바이스들은 열거 됩니다. 

자식 디바이스들도 마찬가지로 configure 되고 드라이버가 boot-start 드라이버라면 시작됩니다. 
boot-start 드라이버가 아니라면 시작하지 않고 PnP Manager가 devnode를 생성하게 됩니다.

이 과정에서 모든 부트 드라이버가 로드되고 부트 디바이스가 시작됩니다.

4. PnP Manager는 PnP device tree에서 아직 시작되지 않은 드라이버들을 로딩합니다. 

이 때 사용되는 것이 드라이버의 StartType, LoadOrderGroup, Dependecies 값입니다. 

디바이스가 non-PnP-enumerable 이라면 자식 디바이스가 PnP-enumerable 하더라도 무시됩니다. 

5. PnP Manager가 아직 로드 되지 않은 SERVICE_SYSTEM_START 타입의 드라이버들을 로딩하고 초기화 합니다. 

file system recognizer (FsRec) 가 이 시점에서 로드됩니다. FsRec는 Boot File System load order group이지만 부트 파일 시스템은 아닙니다. 

6. 부트 시간에 모든 드라이버가 로드 되고 초기화 된 후에 I/O Manager는 reinitialization을 갖고 있는 드라이버들에게서 이 루틴을 호출합니다. reinitialization 루틴은 콜백 루틴으로 추가적인 프로세싱 시간이 필요하거나 할 때 부트 드라이버에 의해 등록되어 있습니다. ( IoRegisterBootDriverReinitialization 또는 IoRegisterDriverReinitialization 으로 등록 )

7. Service Control Manager 가 아직 로드 되지 않은 SERVICE_AUTO_START 타입의 드라이버를 로딩 합니다. 

시스템 부트 후에 시스템에 부착되어 있는 모든 볼륨의 storage 디바이스 드라이버들이 로드되고 시작됩니다.

(로드된 모든 빌트인 파일 시스템, 마운트된 파일 시스템 모두가 시작되는 것은 아님)

[Error/Warning] warning C4995

저장소/VC++

MSDN을 보면 아래와 같이 설명해놨다.

오류 메시지
'function': 이름이 #pragma deprecated로 표시되었습니다.
'function': name was marked as #pragma deprecated

컴파일러에서 pragma deprecated로 표시한 함수를 발견했습니다. 이 함수는 이후 릴리스에서 제공되지 않을 수 있습니다. 다음 예제와 같이 warning pragma를 사용하여 이 경고를 해제할 수 있습니다.

뭐...
경고 쯤이야 해도 상관 없지만~
이까이꺼  warning pragma로 해제해도 되겠지만~
보고 그냥 지나칠 수 없지!

상황은 대략 아래와 같다.

\include\cstdio(49) : warning C4995: 'gets': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstdio(53) : warning C4995: 'sprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstdio(56) : warning C4995: 'vsprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstring(22) : warning C4995: 'strcat': 이름이 #pragma deprecated로 표시되었습니다.
\include\cstring(23) : warning C4995: 'strcpy': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(36) : warning C4995: 'swprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(37) : warning C4995: 'vswprintf': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(39) : warning C4995: 'wcscat': 이름이 #pragma deprecated로 표시되었습니다.
\include\cwchar(41) : warning C4995: 'wcscpy': 이름이 #pragma deprecated로 표시되었습니다.

크아아아아아ㅇ니마어림나ㅓ리마너~
뭐냐 이거... ㅡ,.ㅡ

include 항목을 살펴보았다.

...
#include <strsafe.h>
#include <list>
...
뭔가 냄새가 나는군...
strsafe와 list의 include 순서를 바꾸니 언제 그랬냐는듯 warning이 사라졌다.
흐음... 원인이 뭐였을까...
뒤적거리다 드디어 발견하다!!!!! 오오오오오오~~~~~
iosfwd
과연 흉물스럽도다!!!
list의 include 이력을 쭈욱~ 타고 올라가보면 utility라는 놈이 내부에서 iosfwd를 include하고있다.
음흉한것!!!
뭐... 그냥 그렇다는거다.
결론은 include 순서 바꾸라는거.

끝.

덧.1
어디선가 봤는데 strsafe.h를 include하면 정의 내용을 변경한다고 누군가의 블로그를 봤던 것 같은데 자세한 내용은 기억나지 않는다. 그저 맘 편하게 include 순서를 제일 마지막에 해주는 것이 몸과 마음이 편해지는 지름길이라는 것 뿐...

[Win32] GetFileAttributes

저장소/VC++



Attribute Meaning
FILE_ATTRIBUTE_ARCHIVE 일반 문서파일. 이 파일은 이동되거나 사라질 경우 이때의 상태를 마크한다.
FILE_ATTRIBUTE_COMPRESSED 압축된 파일.
FILE_ATTRIBUTE_DIRECTORY 디렉토리.
FILE_ATTRIBUTE_ENCRYPTED 암호화 파일.디렉토리의 경우 이후에 생성되는 파일과 서브 디렉토리를 암호화하며 시스템 파일에는 적용안됨.
FILE_ATTRIBUTE_HIDDEN 숨김 파일.
FILE_ATTRIBUTE_NORMAL 일반 파일.
FILE_ATTRIBUTE_OFFLINE (캐쉬된)오프라인 파일. 이 파일은 다른곳에서 사용이 불가능하다.
FILE_ATTRIBUTE_READONLY 읽기 전용 파일.
FILE_ATTRIBUTE_REPARSE_POINT 조합된 재구문분석위치 파일.
FILE_ATTRIBUTE_SPARSE_FILE sparse file.디스크공간의 필요에 의하여 제한된 매우 큰 파일. (예를 들면 파일 용량은 몇기가 바이트지만 실제적인 디스크 할당 영역은 1메가 정도 밖에 안되는 파일)
FILE_ATTRIBUTE_SYSTEM 시스템 파일.
FILE_ATTRIBUTE_TEMPORARY 임시 파일. 임시파일은 바로 입출력을 행하지 않고 가급적이면 메모리상에서 읽기와 쓰기를 수행하기 떄문에 일반 파일보다 속도가 빠르다. 응용프로그램은 임시파일을 사용한 후 삭제해야 한다. 

'저장소 > VC++' 카테고리의 다른 글

[Win32] CreateFile로 Text파일을 처리할 때  (0) 2009.10.07
[Error/Warning] warning C4995  (0) 2009.09.23
[C++] Calling Convention  (0) 2009.09.22
[MSDN][VS6.0] Windows Data Types  (0) 2009.09.22
[MSDN][VS6.0] ASSERT  (0) 2009.09.22