2013년 9월 15일 일요일

multithread good example(link)

http://mmanoba.wordpress.com/2011/07/18/c-program-linux-posix-multithread-multitasking-example/

2013년 9월 12일 목요일

linux- eclipse 에서 thread 컴파일 안될때

right click on the project in the project explorer
-> properties
-> c/c++ build
-> Settings
-> linker
-> libraries
-> add
 -> pthread
-> ok

-> rebuild

path는 안잡아줘도 되더이다. 만약에 아규먼트 error가나면 (pthread_create invalid arguments...) 가 뜬다면 이것은 이클립스 문제가 아니라. 코드문제!! 다른부분들을 예제에 맞추어 잘했다면.. 오류가 나지 않겠지만 위와같은경우 대부분 마지막 파라미터값이 문제가된다. thread로 사용할 함수의 인자를 아래와 같이
비어두게되면 error가난다. void* thread(void*) 와 같이 파라미터를 명시해주어야 한다.!!

2013년 9월 4일 수요일

유닉스/리눅스 시스템 프로세스(process) 메모리 배치

간단히 프로세스(process)는 실행중인 프로그램이다.

프로세스는 논리적으로 다음과 같은 세그먼트(segment)로 나뉜다.


-text:프로그램의 명령

-data:프로그램이 사용하는 정적(static) 변수

-heap: 프로그램이 실행 중에 추가로 메모리를 할당할 수 있는 영역

-stack: 함수가 호출되고 리턴됨에 따라 자라고 줄어드는 메모리 영역으로,
지역 변수와 함수 호출 연결 정보가 저장된다.

2013년 9월 3일 화요일

파일 디스크립터(File Descriptor)

I/O 시스템 호출은 파일 디스크립터를 통해 열려 있는 파일을 참조한다.

 파일 디스크립터는 보통 음수가 아닌 작은 정수이며, I/O 대상 파일의 경로명을 인자로 받는

open()을 통해 얻을 수 있다.

(유닉스 시스템은 디바이스를 비롯한 모든 종류의 파일에 I/O를 수행할 때 동일한 시스템 호출open(), read(), write(),close() 등을 사용한다.
 이는 커널이!! 응용 프로그램의 I/O요청을!! 대상 파일이나 디바이스I/O 를 수행하는 파일시스템이나 디바이스 드라이버 동작으로 적절히 해석한다.
  따라서 이 시스템 호출을!! 사용하는 프로그램은 어떤 종류의 파일도 사용할 수 있다.)

보통 프로세스는 셸에서 실행될 때 열려 있는 FD(file descriptor) 3를 물려 받는다.

descriptor 0 은 표준 입력(standard input)   - 프로세스가 입력을 받는 파일
descriptor 1 은 표준 출력(standard output) - 프로세스가 출력을 내보내는 파일
descriptor 2 은 표준 에러(standard error)   - 프로세스가 에러 메시지와 예외/비정상 상태 공지를
출력하는 파일이다.

대화형 쉘이나 프로그램에서 이들 세 descriptor는 stdin, stdout,stderr 파일에 해당된다.

우분투 키값(keycode)&& Event 정보 알아내기

#xev :xev느 X-Window에서 벌어지는 이벤트를 출력하는 명령이다.

X-Window상에서 xev를 실행하면 Testing 창이 하나 뜨는데 이창에서 동적하는 키보드 입력,
마우스이동, 마우스클릭드으이 정보를 얻을 수 있다.
-keycode 알아내기 명령을 실행하고 키보드의 키를 누르면 로그가 나오는데 여기서 키값을 알아낼수 있다.

keycode 'value'

PS: 하지만 원격 터미널 접속시 xev: unable to open display ''라는 문구가 뜨는 경우가 있다.
이 경우는 Xshell4에서 순정 접속시 나오는 메세지 이다. 현재 putty에서 X11설정후 Xming 조합으로 원격접속하고 있는데 putty에서는 잘 보인다.

2013년 9월 2일 월요일

우분투 12.04 c/c++ 이클립스(ecllipse) 개발환경 한방에 끝!!

sudo apt-get update && sudo apt-get upgrade

which gcc g++

둘중에 나오지않는 컴파일러가 있으면 설치한다.

sudo apt-get install g++

12.04(eclipse-indigo)
sudo apt-get install eclipse eclipse-cdt g++

13.04(eclipse kepler)
sudi apt-get install eclipse-cdt g++ or sudi apt-get install eclipse-cdt


bye