3월, 2012의 게시물 표시

재미삼아 만들어본 Double Linked List (이중 연결 리스트)

역시 이론으로 알고있는 것과 실제로 경험해보는 것은 큰 차이가 있다는 것을 실감. 구현하는 것은 어렵지 않았으나, 사소한 것 하나하나에 대한 궁금증이 태어남. 대표적인 것이 "Double pointer(다중 포인터)를 왜 사용하는가?"의 질문. 이에 대한 답은 지역변수의 특징과 관련이 있다는 것을 파악. 지역변수는 함수가 리턴하는 순간 함수와 함께 사라진다는 특징이 있음. 함수에 전달하는 매개변수가 포인터라 하더라도 결국은 지역변수와 비슷한 성격을 보임. 포인터 매개변수는 주소를 전달받아 그것을 가리키는 포인터로 이용한다는 특징이 있을뿐 이외에 것은 일반 변수와 같음. 잡설을 그만두고 코드를 까보자. 코드는 리스트와 테스트로 구분되있다. <이중 연결 리스트> -- list.h -- #define true 1 #define false -1 typedef struct _node { int data; struct _node* prev; struct _node* next; } node; typedef struct d_linked_list { node* head; node* tail; int count; int sorted; } d_linked_list; void del_list(d_linked_list* _list); void ins_data(int _data, d_linked_list** _list); node* search_data(int _data, d_linked_list* _list); int del_data(int _data, d_linked_list* _list); void show_all(d_linked_list* _list); -- list.c -- #include #include #include "list.h" void init_list(int _data, d_linked_list** _list) {

GDB 사용법

*참조도서: "유닉스 리눅스 프로그래밍 필수 유틸리티" GDB 사용 방법 <<실행>> GDB를 이용하기 위해서는 컴파일 과정에서 디버깅 정보를 삽입해야 한다.     컴파일 시 옵션 'g' 이용     $ gcc -g -o main main.c 컴파일이 정상 종료 되면 GDB를 실행한다.     gdb [프로그램명]     $ gdb main     gdb [프로그램명] [프로세스PID]     $ gdb main 1928 GDB가 정상 실행되면 터미널의 프롬프트가 (gdb)로 바뀌게 된다. <<종료>> 종료방법에는 크게 두가지가 있다.     ctrl + d     (gdb) q     (gdb) quit <<소스보기>> 옵션에 따라 실행중인 프로그램의 소스를 다양한 방법으로 볼 수 있다.     l(list)     list 10     list [함수명]     list -  //이전 10라인을 출력한다.     list [파일명]:[함수명]     list [파일명]:10 list 명령어를 사용하면 소스코드가 10줄 단위로 출력된다. 다음의 명령을 통해 출력단위를 변경할 수 있다.     set listsize 20 <<세그멘테이션 폴트가 발생했을대>> 컴파일한 프로그램을 실행했을때 segmentation fault 가 발생하여 비정상 종료되었다면 다음의 명령어를 통해 오류 지점을 확인할 수 있다.     (gdb) r(run) run 명령어는 GDB가 프로그램을 실행시켜 이상이 발생했을때의 파일과 지점을 출력해준다. 또한 관련 함수 또는 변수에 담긴 값을 출력하여 오류수정에 많은 도움을 준다. 오류 지점에 도달하기 전 과정을 확인하기 위해서는 다음 명령어를 이용하면 된다.     (gdb) bt bt명령어는 백트레이스로 프로그램 스택을 역

주분투(우분투) 리눅스에서 CUDA 환경 설정하기.

간단한 CUDA 컴파일 테스트를 하여 정상적으로 동작하는 필자의 현재 환경은 다음과 같다. - xubuntu 11.10 64bit - Nvidia 그래픽 드라이버 설치 (듀얼모니터 이용중) - CUDA 툴킷 4.1  (ubuntu 11.04 64bit 용 ) - gcc 4.4.6 - g++ 4.4.6 CUDA 환경 설치에 앞서 자신의 그래픽 카드가 CUDA를 지원하는지 확인한다. CUDA를 지원한다면 nvidia의 그래픽 카드를 설치한다. 그래픽카드 드라이버를 정상적으로 설치했다면, CUDA 툴킷을 다운로드받는다. (위의 링크 또는 nvidia developer zone에서 받으면 된다.) 다운받은 파일의 확장명은 'run'인데 설치는 터미널에서 sh명령어를 이용하면 된다.     'sh cudatoolkit_4.1.28_linux_64_ubuntu11.04.run'     (당연히 root 권한이 있어야한다.) 설치하는 과정에서 path를 몇번인가 물을텐데 그냥 enter를 누르면 된다. (대부분의 경우 default path가 좋다.) 설치를 완료하면 컴파일러를 좀더 쉽게 이용하기 위해 bash 스크립트를 수정한다.     vi ~/.bashrc 맨 아랫줄에 다음을 입력     export PATH     export PATH=/usr/local/cuda/bin:$PATH     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/lib64:$LD_LIBRARY_PATH 파일을 저장하고 빠져나와 다음을 입력     source .bashrc 다음 명령어를 입력하여 path 설정이 올바르게 됬는지 확인.     'nvcc --version' nvcc의 버전이 올바르게 나온다면 제대로 된 것임. 샘플코드를 이용하여 컴파일 해 봄으로써 nvcc를 알게되겠지만 대부분의 리눅스 배포판은 gcc와 g++의 최신에 가까운 버전을 탑재하여

윈도우 CMD(명령 프롬프트)에서 'ls' 이용하기

리눅스 터미널의 BASH는 강력한 성능을 제공한다. 때문에 리눅스를 사용하다가 윈로우로 넘어오니 터미널이 그리워 cmd를 이용해보려하지만 터미널의 'ls'명령어가 나도모르게 튀어나온다. 이럴때는 'dir'키를 'ls'키로 이용하겠고 정의해주면 되는데 "doskey ls = dir" 처럼 입력해주면 된다. 아주 쉽게 ls가 dir 처럼 동작한다.

쿠분투(kubuntu)에서 vnc 서버 열기

우분투와 달리 쿠분투는 vnc server를 기본 내장하지 않아 사용자가 별도로 설치해야한다. "krfb" 패키지를 이용하면 쉽게 설치할 수 있다.     apt-get install krfb 설치가 완료되면 메뉴의 "인터넷" 또는 "시스템"에서 krfb(데스크톱 공유)"를 확인할 수 있다.

kubuntu에서 한글입력이 안되는 문제 해결

KDE를 이용하는 쿠분투는 우분투에 비해 약간의 불안정함을 보여준다. 그럼에도 불구하고 필자는 우분투의 유니티에 불편함이 더 크게 느껴져 쿠분투로 넘어오게 됐다. 각설하고, 쿠분투 11.10을 설치하고 보니 한글입력이 제대로 되지 않았다. 이를 해결하기 위해 여러 방안을 찾아본 결과를 포스팅하겠다. 단계 1. 한글입력기 "nabi"를 설치해준다.     sudo apt-get install nabi 단계 2. 시스템언어를 변경해준다.     시스템설정 -> local(로캘) -> "시스템 나라말"에서 한국어 설치     시스템 언어 설정 탭에서 "한국어" 선택 & 키보드 입력 방식 nabi 선택 단계 3. 편집기를 이용한 편집     터미널에서 "vi ~/.xinput.d/kd_KR" 입력     입력된 내용들 아래에 "QT_IM_MODULE=xim" 입력 단계 4. 재로그인 또는 재부팅 위의 과정을 그대로 하면 한글 입력이 정상적으로 이루어지게 된다.