|
http://www.cyworld.com/hma1009/2677627 http://www.cyworld.com/hma1009/2677616
파이프(pipe)
-두 프로그램을 연결해주는 연결 통로의 의미("|" 문자를 사용함) # ls -l /etc | more - 출력된 내용이 한꺼번에 넘어갈경우, 한 페이지씩 나눠 보겠다는 의미. 필터(filter) - 필요한 것만 걸러주는 명령어 ( grep, tail, wc, sort, awk, sed 등, 주로 파이프와 같이 사용된다.) # ps -ef | grep bash - "bash"라는 글자가 들어간 프로세스만 출력 # rpm -qa | grep bind - 설치된 패키지 중에서 "bind"라는 글자가 들어간 패키지를 출력 리다이렉션(redirection) -표준 입출력의 방향을 바꿔줌 (표준 입력은 키보드, 표준 출력은 모니터이지만 이를 파일로 처리하고 싶을 때 사용) #ls -l > aa.lst - ls -l " 의 결과를 화면에 출력하지 않고 aa.lst 라는 파일에 쓰도록한다 #ls -l >> aa.lst - aa.lst 파일이 존재하면 기존 내용에 이어쓴다는것을 제외하곤 위와 똑같음 #sort < aa.lst - aa.lst 파일을 정렬해서 화면에 출력 #sort < aa.lst > bbl.st - aa.lst 파일을 정렬해서 , bb.lst 파일에 쓴다.
*메모리 누수 잡기
----------------------------------------------------------------------------------- #include <crtdbg.h> 를 추가한다. 코딩의 마지막 부분에 _CrtDumpMemoryLeaks(); 를 써준다. F5를 눌러 컴파일을 하면 메모리 누수가 일어났을경우 메모리 누수가 일어난 번지(??)를 알려준다. 누수가 일어난 부분을 확인한 후 _CrtSetBreakAlloc(번지); 를 처음 부분에 써주고 F5를 눌러 컴파일 하면 그 부분을 찾아간다. ----------------------------------------------------------------------------------- *NULL값을 확인하는 방법? ----------------------------------------------------------------------------------- #include <assert.h>를 추가한다. 확인하고자 하는 변수(?)를 assert(변수); 이렇게 써준다 . 변수가 NULL값일경우 화면에 에러메시지를 표시해준다. ----------------------------------------------------------------------------------- Visual Studio 에서 개발할 경우 메모리 누수를 확인할려면 디버그 모드에서 F5 (Ctrl+F5 아님) 로 프로그램을 실행하면 되는건 아시죠? 이때 C++ 의 경우는 new 를 사용하고 메모리 반환을 하지 않는경우 해당 위치를 output 창에 보여줍니다. 예를 들어 아래의 코드로 메모리 할당후 어디에서도 반환하지 않았다고 가정해봅시다. char *pszTest = new char[100] ; F5 로 프로그램 실행후 종료하면 Debug 출력창에 아래와 같이 나옵니다. Detected memory leaks! Dumping objects -> D:ProjectMemoryTest.cpp(60) : {73} normal block at 0x00374E58, 100 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. F4 또는 위의 파일경로명을 더블클릭 하면 해당 위치 소스코드의 포커스를 이동해주기 때문에 메모리누수를 해결하는데 아주 편리합니다. 이렇게 가능한 이유는 비쥬얼스튜디오에서 프로젝트 생성시 자동으로 추가된 아래의 구문 때문입니다 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif 보시면 아시겠지만 new 라는 놈을 DEBUG_NEW 로 다시 정의하였습니다. 실제 디버그에선 new 를 사용해도, DEBUG_NEW 가 실행하게 되는것입니다. 그렇다면, 이 DEBUG_NEW 의 정체가 뭘까요? DEBUG_NEW 가 정의되어있는 소스코드를 가보겠습니다. DEBUG_NEW 는 <AFX.H> 에 정의되어 있고, 내용은 아래와 같습니다. #define DEBUG_NEW new(THIS_FILE, __LINE__) 오호라~ new 가 연산자 오버로딩 되어 있는게 확인됩니다. 일반적으로 우리가 생각하는 new 는 인자로 할당할 크기만 주게 되어 있습니다. 하지만, 위의 구문을 보면 해당 위치의 파일명과 라인수를 지정하게 되어 있군요. 다시말해, new 를 사용할때마다 사용된 곳의 파일 경로와 해당 라인수를 메모리에 함께 등록하는 것입니다. 결국 해당 메모리가 제거되지 않았을땐, 메모리에 기록해둔 파일경로와 라인수를 참조해서 디버그 출력창에 뿌려주고 이를 식별자로 사용하여 이동하기 쉽게 해주고 있습니다. 여기까지는 비쥬얼 스튜디오가 자동으로 해주기 때문에 크게 신경쓸 일이 없었습니다. 하지만, 문제는 C 코드일 경우입니다. 비쥬얼스튜디오는 불행하게도 C 코드로 된 프로젝트를 생성하는 마법사가 없습니다. 그러다보니 자동으로 생성해주는 메모리 누수 매크로도 제공하질 않습니다. 실제 C 코드에서 사용하는 malloc 을 사용해서 메모리 해제 하지 않고 결과를 보겠습니다. char *pszTest2 = (char*)malloc(100*sizeof(char)) ; 위코드를 수행후 종료하면 디버그출력창에 아래와 같이 나옵니다. etected memory leaks! Dumping objects -> {73} normal block at 0x00374E58, 100 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. 도대체 어떻게 하라는건지… 더블클릭해도 아무 반응도 없고, 어디서 메모리 해제가 일어났는지 아무런 정보도 주질 못하고 있습니다. 그렇다고 포기할순 없죠. C++ 의 new에 사용했던 방식대로 C 의 malloc 에도 똑같이 해주면 될 것 같습니다. malloc 할때 현재 파일경로와 라인수를 식별자로 함께 등록해주면 되겠군요. 그렇다면 이러한 매크로(DEBUG_NEW와 같은)를 직접 만들어야 할까요? 친절하게도 비쥬얼스튜디오 헤더파일에 미리 다 만들어 놨더군요. 우선 결과 코드를 보겠습니다. #ifdef _DEBUG #include <crtdbg.h> #ifdef malloc #undef malloc #endif #define malloc(s) (_malloc_dbg( s, _NORMAL_BLOCK, __FILE__, __LINE__ )) #endif new 를 사용할 때 처럼, malloc 을 다시 다른 함수를 사용하게 정의하였습니다. 위 코드를 C 소스코드의 상단에 위치시킵니다. 그런후 다시 아까의 코드를 수행후 종료하면 친절한 디버그 출력창으로 바뀐걸 볼 수 있습니다. Detected memory leaks! Dumping objects -> D:ProjectMemoryTest.c (68) : {73} normal block at 0x00374E58, 100 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. 위 매크로를 보시면 _malloc_dgb 라는 매크로가 보입니다. 우린 그저 가져다 쓴것에 불과하군요. <crtdbg.h> 를 열어보시면 메모리 관련 함수인 malloc, calloc, realloc, expand, free, msize 에 대한 디버그용 매크로가 정의되어 있는걸 보실 수 있습니다. 그렇다면 _malloc_dgb 에서 사용된 인자들의 의미가 과연 무얼까요? s 는 실제 할당할 크기(사이즈) 입니다. _NORMAL_BLOCK 는 시스템에서 메모리를 할당할 때 사용되는 블록의 기본 단위 크기 입니다. __FILE__ 은 현재 코드의 전체 경로명입니다. __LINE__ 은 현재 코드의 수행중인 라인수 입니다. 다시, crtdbg.h 를 보시면 free 라는 놈도 디버그용이 있습니다. 이왕 하는거 위에서 정의된 모든 메모리 관련 함수에 대해서 디버그용으로 변경해 봅시다. #ifdef _DEBUG #include <crtdbg.h> #ifdef malloc #undef malloc #endif #define malloc(s) (_malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__ )) #ifdef calloc #undef calloc #endif #define calloc(c, s) (_calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__ )) #ifdef realloc #undef realloc #endif #define realloc(p, s) (_realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__ )) #ifdef _expand #undef _expand #endif #define _expand(p, s) (_expand_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__ )) #ifdef free #undef free #endif #define free(p) (_free_dbg(p, _NORMAL_BLOCK)) #ifdef _msize #undef _msize #endif #define _msize(p) (_msize_dbg(p, _NORMAL_BLOCK)) #endif 이제 메모리누수 안녕~~~ 출처 : Devpia
자!드라이브 한번 떠나볼까? “망설이다 그냥 주말 하루 날려버리느니 가까운 곳에라도 한바퀴 다녀왔을 때가 제일 뿌듯해요.” 지난 14일 춘천에서 만난 김영우씨(34·서울 강서구)는 자신의 차가 출퇴근용이 아니라 레저용임을 강변한다. 김씨는 여자친구가 생긴 지금 어느새 드라이브 마니아가 돼있었다. 한 주동안 쌓인 스트레스는 반드시 바람에 날려버려야 한대나? 이번 주말, 어디 한번 떠나볼까나?
◇북한강코스 유유히 흐르는 북한강은 산을 녹여내 담고 있다. 청평호반을 달리는 운전자가 그 물에 비친 산을 탐낸다면 ‘이백의 달’처럼 위험해진다. 하지만 길은 앞만 주시해야하는 운전자를 결코 소외시키지 않는다. 호명산을 끼고 도는 왕복 2차선의 도로는 5월의 푸르름과 맑은공기터널을 구불구불 재미나게 달리는 즐거움을 선사한다.풍광에 빠진 동승자는 절대 모른다. 이 재미를. 46번 경춘국도를 달리다 청평댐방향인 363번 지방도로로 빠져 춘천쪽으로 향하다보면 가평군 복장리부터 20㎞에 이르는 이 드라이브 코스가 나온다. 돌아올 때는 반대로 양평쪽으로 오면 같은 북한강이지만 또 다른 맛을 즐길 수 있다. 청평댐에서 문호리길로 달리다 서종·양수리를 거쳐 서울로 들어오면 된다. 또 인근에는 두물머리∼강변도로∼서종면 카페촌∼노산팔경∼이항로 선생 생가∼정배리∼중미산 휴양림로 오르는 7.3㎞코스로 전원의 산길을 달리는 맛이 제법이다. ◇강화도코스 강화도 해안도로는 서울에서 가장 가까운 섬 해안일주코스. 서해안의 바다내음을 온몸에 받으며 달릴 수 있다. 또 동막해수욕장 등 해안 절경이 많고 돌아오는 길 외포리 장에서 강화도 특산 순무와 밴댕이 젓갈을 구입할 수 있어 기쁨 두배. 남단 초지대교를 이용 시계방향으로 돌아도 좋다. 석모도 19㎞에 이르는 일주코스를 빼놓을 수가 없어 석모도로 차를 싣고 갈 생각이라면 북쪽 강화대교를 통해 외포리쪽으로 올라가야 한다. 48번 국도로 김포를 지나 강화대교를 건너 약 2㎞정도 가면 강화읍 인삼센터 앞 삼거리가 나온다. 이곳에서 좌회전 후 직진하고 또 보문사쪽으로 우회전, 인산저수지 끝에서 다시 우회전 3∼4㎞ 직진하면 외포리선착장이 나온다. 이곳에서 페리호 차량 선적가능. 삼보해운 (032)932-6007 ◇서해대교코스 한국에서 가장 멋있는 고속도로로 손꼽히는 서해안고속도로. 시속 100㎞로 바닷바람을 가르며 이 기나긴(353㎞) 도로를 달리는 기분은 단연 최고다. 또 중간중간 볼게 많아 정신 못차리면 목포까지 가게된다. 서해대교 중간 휴게소인 행담도는 고속도로 휴게소가 아닌 리조트에 가까울 정도로 멋지다. 또 당진 IC에서는 마량포구 왜목마을, 서산 IC에선 서산농장과 신두리해안, 홍성 IC는 안면도 꽃지해수욕장과 삼림욕장이 있어 도로를 달리다 내키는 IC에서 빠져 마치 백화점처럼 이용할 수 있다. 단점이라면 인기가 많아 서울부근에서 늘 교통체증이 있다는 것이다. 서울에서는 서부간선도로에서 안양쪽으로 나가면 바로 연결된다. 종착지는 목포. ◇서울 속 코스 고유가가 부담스러워 한시간 이내에 다녀올 수 있는 가까운 곳을 찾는다면 단연 으뜸인 북악스카이웨이가 있다. 북한산능선을 끼고 동북쪽으로 자하문에서 정릉 아리랑고개까지 19㎞에 달하는 관광도로. 달리는 중간 서울의 경치가 도로 옆으로 펼쳐진다. 도심속 도로답지않게 10만여그루의 가로수가 빽빽한 것도 매력이다. 도로 중간의 팔각정에는 간단한 식사와 음료, 그리고 전망을 감상할 수 있는 망원경이 있다. 야경이 근사한 까닭에 평일 밤에 떠나도 좋다. 광화문∼창의문길∼북악스카이웨이∼팔각정. 삼청동∼북악골프장∼북악스카이웨이∼팔각정. 해발 243m인 남산을 순환도로로 도는 코스도 있다. 남산에 오르면 한강과 북한산, 인왕산 등 서울의 지세가 한눈에 들어온다. 남산 1호터널∼서울예술대학~서울과학교육원~남산도서관~하얏트호텔을 거치는 순환도로가 국립극장 앞 타워호텔까지 나있다. N서울타워를 오르려면국립극장 옆으로 난 3.5㎞ 유료도로를 이용해야 한다. 또 도로주변 남산골한옥마을. 자동차극장과 돈까스 식당촌 등이 간간히 드라이브의 재미를 돋운다.
|
메뉴릿
카테고리
최근 등록된 덧글
<a href="http://ww..
by asas at 10/20 블로그구경 잘하고 갑니.. by bangtae at 11/18 퍼갑니다. http://blog... by 에르데 at 10/24 유익한 정보였습니다. .. by koohyun at 08/19 좋은정보 얻어갑니다.. .. by 박은선 at 07/24 별말씀을.... 저도 긁.. by 悠悠自適 at 06/24 좋은자료들을 보여주셔서.. by 미동 at 06/19 프로그래밍에 관해 좋은.. by 알렉수 at 01/30 눈에 띄는 링크들이 있어.. by MK at 10/13 시간을 관리하는 6가지 방.. by eugjin at 09/19 최근 등록된 트랙백
라이프로그
포토로그
메모장
이전블로그
이글루링크
이글루 파인더
태그
|