sol:
pthread_create(&func_node_thread, NULL, NodeInfoThread, (void*)Socket);
void *NodeInfoThread(void *_sock) {
int sock = *(int *)_sock;
int sock = (int) ((void*) _sock); <- 컴파일시 오류는 안나지만 원하는 결과를 못얻는다.. 주의
C표준은 int를 void*로 또는 그 반대로 캐스팅을 때의 결과를 정의하지 않았다. 하지만 대부분의 C 컴파일러는 이런동작을 허용하고 원하는 결과를 내놓는다.
2013년 10월 1일 화요일
2013년 9월 29일 일요일
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*) 와 같이 파라미터를 명시해주어야 한다.!!
-> properties
-> c/c++ build
-> Settings
-> linker
-> libraries
-> add
-> pthread
-> ok
-> rebuild
path는 안잡아줘도 되더이다. 만약에 아규먼트 error가나면 (pthread_create invalid arguments...) 가 뜬다면 이것은 이클립스 문제가 아니라. 코드문제!! 다른부분들을 예제에 맞추어 잘했다면.. 오류가 나지 않겠지만 위와같은경우 대부분 마지막 파라미터값이 문제가된다. thread로 사용할 함수의 인자를 아래와 같이
비어두게되면 error가난다. void* thread(void*) 와 같이 파라미터를 명시해주어야 한다.!!
2013년 9월 10일 화요일
2013년 9월 4일 수요일
유닉스/리눅스 시스템 프로세스(process) 메모리 배치
간단히 프로세스(process)는 실행중인 프로그램이다.
프로세스는 논리적으로 다음과 같은 세그먼트(segment)로 나뉜다.
-text:프로그램의 명령
-data:프로그램이 사용하는 정적(static) 변수
-heap: 프로그램이 실행 중에 추가로 메모리를 할당할 수 있는 영역
-stack: 함수가 호출되고 리턴됨에 따라 자라고 줄어드는 메모리 영역으로,
지역 변수와 함수 호출 연결 정보가 저장된다.
프로세스는 논리적으로 다음과 같은 세그먼트(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 파일에 해당된다.
파일 디스크립터는 보통 음수가 아닌 작은 정수이며, 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 파일에 해당된다.
피드 구독하기:
글 (Atom)
