2012년 3월 31일 토요일

아스키 코드

아스키코드는 위 약자풀이에서 보는 것과 같이 미국표준협회(ANSI)에서 제정된 것이다.
이것은 정보교환용 미국표준부호이며, 문자, 숫자, 특수문자에 수치(numberic Value)를 부여한 부호체계이다.

음... 쉽게 설명하자면 사전에 약속을 한다음 암호를 보내고 해독하는 과정을 생각하면 쉽게 이해되리라 생각한다. -_-

예를 들어서 대문자 'A'는 16진수로 '0x40'으로 약속되었으며
소문자 'a'는 16진수로 '0x61'로 약속되어 있다.




자세한 내용은 아스키코드 협회 홈페이지를 참조하세요.
링크 : http://www.asciitable.com/

이렇게 아스키코드는 16진수로 둘째자리까지 있어서
총 256개로 구성되어 있다 (0x00에서 0xFF까지)
그리하여 우리는 여기서 아스키코드는 8비트(bit)졌음을 알수 있고 고로, 1바이트(byte)로 이루어졌음을 알수 있다.

보통은 (0x00 에서 0x7F) 부분을 많이 사용하며...
그 이후의 문자들은 확장형이라고 해서 보통 유니코드를 아스키로 읽을때 볼수있는 괴상망측한 문자들로 구성되어 있다.





아스키코드는 본인의 업무상에서는 주로 하드웨어를 제어할때 많이 쓰이며,
그 경우 메세지 앞뒤로 제어문자들이 딸려오는 것이 특징이다.
아스키코드만으로는 세상모든 문자를 다 표현할 수 없어, 그리하여 어제 설명했던 유니코드를 만들어 다양한 전세계언어들을 넣을 수 있도록 하고 있다.

CS공부, 유용한 사이트

http://winapi.co.kr/

fopen() 옵션과 binary/text mode

fopen() 옵션 정리

fopen의 파일 열기 옵션은 좀처럼 제대로 외우기가 쉽지 않다. 또한 모든 옵션별 차이점을 제대로 파악하기도 쉽지 않고... 일단 파악된 만큼 정리해 놓고... 추후 더 발견된 사항이 있으면 지속적으로 update해 나가는게 좋을 듯..

"r" : 읽기 전용 모드. 파일이 없으면 NULL return.
"w" :쓰기 전용 모드. 파일이 없으면 생성되고 있으면 내용이 없어진다.
"a" : append모드. 파일이 없으면 생성. 이미 존재하는 파일 끝부분에 file pointer가 위치하게 되며 이 위치부터 뒷쪽으로만 write가능. 읽기는 불가능. fseek등으로 이 부분보다 앞으로 file pointer를 이동시키면 어떻게 될까 ? 아래 내용으로 봐서는 fseek등으로 file pointer를 이동하여도 이와 상관없이 파일 끝부분에 write가 되는 것으로 생각됨.

Opening a file in append mode (a in the mode) causes all subsequent writes to the file to be forced to the current end-of-file, regardless of previous calls to the fseek() function.
"r+" : 읽고 쓰기 모드, 파일이 없으면 NULL return.
"w+" : 읽고 쓰기 모드 단, 파일이 없으면 만들고 있으면 기존 내용을 지움. write를 먼저 한 후 동일 파일 포인터로 읽기 수행이 필요한 경우 사용. 보통은 읽기 전용, 혹은 쓰기 전용으로 fopen하므로 w+가 필요한 일은 별로 없을 듯.
"a+" : append모드, 읽고 쓰기 가능. 파일이 이미 존재할 경우 그 파일의 끝부분에서부터 추가된 내용을 쓴다. 읽기는 fseek로 지정한 file pointer위치에서 가능하나 쓰기는 파일 끝부분에서만 가능.

When a file is opened with update mode (+ in the mode), both input and output may be performed on the associated stream

[출처] http://dooeui.blogspot.com/2008/10/fopen.html



그리고 rb, rt 처럼 뒤에 b와 t는 :
b : binary
t : text 를 뜻 합니다.
b, t의 다른 점은 b로 파일을 쓸 경우 text에디터로 열면 알 수 없는 문자료 표기된다고 보시면 되고, t는 일반 text파일로 써 사람이 저장된 데이터를 읽을 수 있는 그대로 볼 수 있습니다.
물론 b로 파일을 저장했다면, 반드시 b모드로 파일을 읽어야만 합니다. text mode일 경우도 동일하고요.

즉, 각 설명은 아래와 같이 볼 수 있습니다.

a) "r"와 "rb"
- r : 오직 파일을 읽기 위해서 개방(해당 파일을 열기만 할 때)
- rb : 파일을 읽기 위해서 개방 그리고 2진모드(binary mode)로 하라

b) "rb" 와 "r+b"
- rb : 파일을 읽기 위해서 개방하는데 2진모드(binary mode)로 하라.
- r+b : 파일을 읽고 쓰기위해서 개방하는데 2진모드로 하라.

c) "w"와 "wb"
- w : 파일을 쓰기위해 개방(오직 쓰기)
- wb: 파일을 쓰기위해 개방하고 binary mode로 개방하라.

d)"ab"와 "a+b"
ab : w모드와 달리,지정해 준 파일이 존재하면 data를 지우지 않고 파일의 끝에서 부터 추가하고 binary mode로 한다.
a+b : 파일을 읽고 쓰기위해 개방하는데 지정해 준 파일이 존재 시 파일 끝에서 부터 데이터를 추가하며 binary mode로 한다.

출처 : 네이버지식인
[출처] fopen의 옵션들|작성자 남땡





바이너리(Binary) & 텍스트(Text) 파일의 차이

2010/04/23 11:32
'바이너리와 텍스트의 차이'를 검색하다 여기까지 찾아오셨다면 잘오셨습니다. 혹시 좀전에

"텍스트(text) 파일은 문자를 출력하는데 적합한... 어쩌고 저쩌고
...반면 바이너리(binary)는 그림이나 음악 파일을 저장하는데 적합합니다..."

이런 자료를 보셨다면 빨리 잊으십시오 =_=;;
적어도 개발자라면, 이런 컴퓨터 교양 서적 서두에나 적힐 법한 자료를 원하진 않을것입니다.

C언어든 아니든간에, 파일을 저장할 때 text mode와 binary mode를 구분하게 되어있습니다.
Windows OS 위에서의 애기지만요~ 어쨌든,

간단한 테스트를 위해 아래와 같이 문자열을 만들고 text mode와 binary mode로 저장해봅시다.

예) "안녕하세요? 어쩌구 저쩌구~..."

다음 메모장으로 읽어보죠.
둘 다 똑같죠?


아~ 똑같구나~ 해서 그냥 사용하면, 반드시 가까운 미래에 알 수 없는 버그와 함께 돌아옵니다.

좀 차이를 두기 위해 아래와 같이 코딩하고 파일을 비교해 봅시다.

void CMFCViewerDlg::OnBnClickedButton2()
{
int data[100];
for(int i=0; i<100; i++)
data[i] = i;
SaveFile("binary.log", (char*)data, sizeof(data), 1); // binary mode로 저장
SaveFile("text.log", (char*)data, sizeof(data), 0); // text mode로 저장
}

사용자 삽입 이미지
사용자 삽입 이미지


"똑같은 내용인데, 크기가 1바이트 다릅니다."

이것은 binary mode의 특정 캐릭터(charactor)가 text mode로 저장될 때 2byte로 저장되기 때문입니다. 바로 줄바꿈 캐릭터입니다. CR & LF 라 불리는 것들인데, UNIX, MAX, Windows 3인방에서 각각 줄바꿈을 다르게 사용하다보니 생긴 현상입니다.

어쨌든 text mode는 줄바꿈을 CRLF로 관리하는데, 여기서 CR은 0x0D 이고 LF는 0x0A 입니다.
그래서 위의 예제에서

"text mode로 저장하면 정수(integer) 0x10 이 LF로 인식되어 0x0A0D 로 변형저장 됩니다."
그래서 무턱대고 구조체나 배열 데이터를 text mode로 저장했다가 읽으면 알 수 없는 0x0D가 어디선가 튀어나오게 됩니다.

결론: 데이터를 저장할 때는 반드시 binary mode로 저장하는 습관을 가지세요 -*
출처:http://snbosoft.tistory.com/76








유닉스/리눅스

미국 벨(Bell) 연구소에서 개발된 소프트웨어 개발용의 운영 체제(OS). 유닉스는 1969년에 그 원형이 완성되었지만 1973년에 프로그램 대부분이 C 언어로 수정되었다. 이 때문에 이식성이 높아졌으며, 동시에 다중 사용자/다중 태스크의 실행을 지원할 수 있는 것을 특징으로 하는 대화형의 운영 체제이며, 텍스트 조작 툴, 문서 처리, 전자 메일 외에 취급이 쉬운 파일 시스템을 갖추고 있다. 당초에는 미니컴퓨터용이었지만 최근에는 퍼스널 컴퓨터범용 컴퓨터용의 유닉스도 개발되어 일반에게도 보급되기 시작했다. 최근에도 이러한 유닉스에 준한 기능을 갖춘 OS가 출현하였으며 이것을 유닉스라이크 OS(UNIX-like operating system)라고 한다.

출처
컴퓨터인터넷IT용어대사전, 전산용어사전편찬위원회 엮음, 2011, 일진사

유닉스








리눅스는 핀란드의 컴퓨터공학과 학생이던 리누스 토발즈(Linus Torvalds)가 만든 컴퓨터 운영체제(OS).

리누스 토발즈는 헬싱키대학에 재학중이던 시절 학교 수업중 교육용 유닉스(UNIX)인 미닉스(Minix)를 배우면서 보다나은 미닉스를 만들어보기 위해 취미삼아 운영체제를 만들기 시작했다.

그는 고가의 장비를 소유할 수 없는 처지였기에 대형 컴퓨터에서 사용하는 유닉스 소스 코드를 수정해 개인PC에서도 사용할 수 있는 공개 운영체제(OS)로 개발하고 자신의 이름을 따서 '리눅스 0.01 버전'으로 명명했다.

리누스는 리눅스의 소스코드를 공개했으며, 이를 바탕으로 수만명의 프로그래머들이 다양한 응용 프로그램을 내놓아 성능이 개선되고 있다. 리눅스 운영체제가 대표적으로, 누구나 무료로 이용할 수 있는데다 공개된 코드를 기반으로 프로그램을 마음대로 변형할 수도 있다.

리눅스는 오픈소스를 주장하는 소프트웨어 공유 운동단체인 GNU 프로젝트의 전폭적인 지원과 전세계 프로그래머의 참여하에 전세계 서버용 OS의 27%를 점유할 만큼 급성장했다.

'오픈소스'란 소프트웨어 등을 만들 때 해당 소프트웨어가 어떻게 만들어졌는지 알 수 있도록 일종의 프로그래밍 설계지도를 무료 공개, 배포하는 것.

리눅스는 결국 10년 만에 거대 소프트웨어 기업인 마이크로소프트(MS)를 위협하는 존재로까지 부각되기에 이르렀다.

한편 리눅스의 마스코트는 펭귄이다. 맛있게 식사를 마친 후 편안히 앉아있는 상태를 그린 것인데 이 펭귄을 디자인한 사람은 Larry Ewing이라는 사람이고 펭귄 이름은 Tux라고 한다

2012년 3월 21일 수요일

o/s 추가 개념

 process syncronization

동시에 여러개의 쓰레드가 동일한 자료를 접근하고 조작할 때 그 실행결과가 접근이 발생한 특정 순서에 의존하는 상황이 발생하는데 이로 부터 보호하기 위해 우리는 한순가에 단하나의 쓰레드만이 공유 변수를 조작할 수 있도록 보장해주어야 한다. 이러한 보장을 위해 쓰레드에 대한 동기화기 필요하다.


사운드 포지라는 음성 편집 프로그램을 열어 파일을 불러온다. 현재 그 파일은 winamp프로그램을 통해 현재 플레이 되고 있다고 해보자

결국 현재 음악 파일이 2개의 프로그램을 통해 불러진 상태 이때 사운드 포지 에서 편집을 하게 된다면 윈엠프에서 듣공 ㅣㅇㅆ는 음악 파일은 어떻게 디는 것일가
이런한 부분이 바로 프로세스 동기화가 필요한 부분이다.

이 문제는 많은 수의 접속자를 수용하는 서버에서는 더욱더 중요한 문제가 아닐 수 없다.

::임계 구역(critical section)::
프로세스 동기화를 위해 가장 먼저 알아야 할 개념이다.
각 쓰레드들(프로세스)은 각자의 임계구역을 갖는다. 이곳에서 쓰레드는 공통변수를 변경하고 테이블을 갱신하면 파일에 대한 쓰기 작업을 수행한다.


::동기화 작업의 필요조건 3가지::
1. 상호배제(mutual exclusion)
임의 한 쓰레드가 자신의 임계구역에서 실행되고 있다면 다른 쓰레드들은 그들의 임계구역에서 실행이 불가능 하다.(임계구역에는 하나의 쓰레드만 들어갈 수 있다.)

2. 진행(progress)
임계 구역에서 실행되고 있는 쓰레드가 없고 임계구역으로 진입코자 하는 쓰레드가 다루 사면

3. 한정된 대기(Bounded waiting)
쓰레드의 Starvation을 예방코자 임의의 한 쓰레드가 임계구역에 진입요청을 한 후 다른 쓰레드들이 임계 구역에 진입하도록 허용되는 횟수에 한계를 둠(어느정도 대기를 하면 임계 구역에 들어갈 수 있도록 보장을 해줘야 함)

출처:http://cafe.naver.com/geekerproject.cafe

64비트, 32비트

윈7 64비트에서는 기존의 VISTA나 XP의 기본적인 "Program Files"폴더가 "Program Files(x86)" 으로 변경되어지고 64bit 어플리케이션만 " Program Files"에 설치가 됩니다.

기본적으로는 동일하지만 차이점은 있는 것이지요.