개발하면서/etc
-
Shift operation개발하면서/etc 2009. 10. 22. 23:23
shift연산이라하면 32비트 컴퓨터에서 32비트를 왼쪽 혹은 오른쪽으로 이동하는것을 말하고, 이동후 빈공간은 0으로 채워지는걸로만 알았는데. . . 무려 3개의 종류가 있었다......두둥....(이놈의 무지.....) 위키를보고 내 나름대로 정리해보려한다. 출처 URL은 Arithmetic shift, Logical shift, Circular shift Arithmetic shift 왼쪽로 이동한후 빈공간은 0으로 채워지고, 오른쪽 shift후 빈공간은 가장왼쪽비트(즉 부호비트)가 채워지게 된다. 즉 부호비트를 보호한다는것~!! 부호있는 수를 2로 나누거나(나머지는 버림), 부호없는 수를 2로 곱할때 유용하게 사용할수 있다. 왼쪽 시프트 할때는 overflow가 생길수도 있다~!! (CS, CP 레..
-
Condition variable 호출순서개발하면서/etc 2009. 10. 8. 21:16
지금 threadpool에 대해 공부하고 소스를 분석하고 있다. threadpool은 작업을 관리하는 스레드가 있고 작업을 하는 스레드가 있다. 작업관리 스레드가 wait상태의 작업을하는 스레드에게 signal을 보내서 일을 하게만든다 이 과정에서 signal과 wait간의 호출순서가 궁금해서 검색을 통해 아래 좋은 사이트를 검색하게 되었다. 출처 : kldp 질문 글을 이해하기 쉽게 그림으로 그려보고자 한다. signal을 받았다고 바로 작업을 수행하는것이 아니라, 신호 보내는 스레드에서 unlock을 한 후에 작업을 한다 그리고 cond_wait가 실행 되면 현재 lock되있는 mutex를 unlock하고 return 할때 다시 lock해준다. cond_signal을 실행할때 wait된게 없으면 아무..
-
경계없는TCP/IP 데이타, 임의로 경계단위로 수신하기개발하면서/etc 2009. 10. 6. 21:17
위 그림은 지금 하고 있는 프로젝트이다. 나중에도 도움이 될것 같아서 이렇게 글을 남긴다. 우선 그림에 대한 간략한 소개를 하면, Admanager는 DB를 일정간격으로 갱신여부를 감시하고, 갱신될 경우 그 데이타를 가져와서 Adserver로 전송하는 역할을 한다. Adserver는 받은 데이타를 가공하고 저장한뒤 사용자 접속시 해당 데이타를 뿌려주는 역할을한다. 여기서는 Admanager와 Adserver사이에 대해서만 얘기하기로 하자.Admanager에서 전송할 데이타는 탭 단위로 구분 되어있고, 마지막은 \n 이다. 즉, Admanager는 record 단위로 전송을 하고, Adserver는 record 단위로 처리를 해주면 되는것이다. 근데 이게 왜 문제가 될까 위의 그림을 보면 Adserver에..
-
여러개의 파일 gdb로 디버깅하기개발하면서/etc 2009. 10. 5. 15:25
현재 리눅스에서 개발을 시작했는데 안될때마다 일일히 printf로 변수 찍어서 디버깅을 해나갔는데 이게 정말 짜증나는것이었다. 그래서 검색하던중 gdb라는 프로그램을 알게되었다. 우왕 +_+ ㅋㅋ 원하던 거다~!!! 사용법에 관한 글들은 많이 있으니 패스하고, 많은 gdb관련 문서들... 내가 필요한건 여러개 파일을 gdb로 디버깅하는것이기 때문에 이것에 대해 적어볼까 한다. 우선 임의로 만든 소스는 다음과 같다 //kang.c #include "kang.h" int sum(int i, int j) { return i +j; } //kang.h int sum(int i, int j); //main.c #include #include "kang.h" int main() { int i = 3, j = 4; ..
-
0, '\0', NULL의 차이점을 알아보자개발하면서/etc 2009. 9. 11. 10:20
세개를 볼때......'어? 같은말 아니야?'라고 생각했었다. 그런데 어느 한 사이트에서 다르다는 말을 보게 되었고 또 나름 정리하고 내생각을 적어보려한다 NULL은 매크로형이며, (void *)0 으로 선언되어 있다. 이것은 포인터에서만 사용해야지 다른곳에 사용하면 문제를 야기할수 있다. 값이 0이라기보다 아무것도 가리키지 않는다는 표현이 맞다. 0은 숫자가 될수도 있고(즉 nul이 될수도있다는 얘기) null pointer constant도 될수있다. 포인터나 문자나 사용 가능 '\0'은 문자상수, 아스키 코드의 첫번째 문자를 의미한다, nul을말한다 (NULL과 헷갈렸구나~~!!) 내 나름대로 정의를 내리자면, 초기화할때 포인터는 NULL이나 0, 문자열은 0이나 '\0', "" 참조 사이트 htt..
-
초기화는 꼭하자개발하면서/etc 2009. 7. 31. 23:53
회사에서 일을 하는중에 정말 다시 한번 초기화의 소중함을 느끼게 해준 그런 기회 개발 카테고리로 하기는 뭐해서 이곳으로 이동 결론부터 말하자면 만약에 parsing하는부분에서 구분할 목록이 10개 미만일경우 parsing_row에서 사용하지 않은 포인터 배열은 이상한곳을 가리키게 되고 그 결과 10개를 사용하는 부분에서 에러를 발생해 세그먼트 오류가 발생하게 되는것이다. 그래서 초기화를 해주니 바로 실행;; 정말 다시한번 초기화에 중요성을 깨닫게 해주는 기회였다 사랑한다 포인터~~~~~~