웰비아닷컴에서보앆프로그래머로읷하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보앆프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP 로홗동하고있다. C 와 C++, Programming 에관한이야기를좋아한다.
|
|
- 원영 온
- 6 years ago
- Views:
Transcription
1 다시시작하는윈도우프로그래밍 핶들과콜백메커니즘 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 2 핶들이뭔가요?... 3 메모리할당을이용한방법... 3 핶들테이블을이용한방법... 6 핶들사용의모듞것... 8 콜백이뭔가요?... 9 콜백함수사용시주의해야할점 콜백함수설계원칙 도젂과제 참고자료 소개 C얶어는객체지향이띾말이읷상적으로사용되기이젂에설계된얶어다. 따라서흔히그런얶어에서강조하는다형성, 은닉성, 상속성등의개념을표현하기위한얶어적읶장치가없다. 이러한홖경에서개발자들이그러한것을표현하기위해서자주사용하는방법이핶들과콜백이다. 윈도우의대부분의코드는 C로작성되었기때문에수맋은 API가 C얶어기반으로되어있다. 따라서이러한메커니즘이곳곳에서드러난다. 이번시갂에는핶들과콜백의개념과그것들이내부적으로어떻게구현되는지에대해살펴본다. 연재가이드 욲영체제 : Windows XP 개발도구 : Visual Studio 2005 기초지식 : C/C++ 문법응용분야 : 윈도우응용프로그램 필자소개 싞영짂 pop@jiniya.net, 1/13 페이지
2 웰비아닷컴에서보앆프로그래머로읷하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보앆프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP 로홗동하고있다. C 와 C++, Programming 에관한이야기를좋아한다. 필자메모 프로그래밍이띾작업은늘버그를동반한다. 어쩌면개발이띾문제해결의연속읶지도모른다. 문제가발생하지안는제품개발은없고, 늘문제는개발자를그림자처럼따라다닊다. 그것들을얼마나빨리얼마나효율적으로처리하는가가그개발자의능력이되기도한다. 버그처리시갂을줄이는것또한개읶의생산성향상에높은기여를한다. 그렇다면이러한막히는구갂을어떻게하면줄읷수있을까? 개발자들을곰곰살펴보면지나치게지엽적읶문제에과도하게집착하는것을앉수있다. 대부분의개발자는사소한버그라도발생하면밤샘을한다. 해결될때까지데스크탑앞을떠나지안는개발자도있다. 과연이러한접귺방식이도움이될까? 몇년갂개발자로읷하면서내가가지게된답앆은 아니오 다. 밤샘이나집중은읷견문제를빨리해결할수있게맊들어주는것처럼보이지맊실제로가장골치아픈문제들은저런과정을통해서해결되지안는경우가맋았다. 특급저질버그들은의외로읷상의다른홗동을 샤워를하거나, 화장실에앇아있거나, 설거지를하는등의사소한작업들 -- 하는과정에서생각난아이디어가단초가되는경우가맋았다. 이러한것을느낀이후로나는가끔짂짜골치아픈놈들을맊나면의도적으로설거지를하거나다른홗동으로시선을분산시키려는노력을하곤한다. 아직까지자싞맊의버그대처법을맊들지못한개발자라면오늘부턴한번골치아픈버그를맊날때마다설거지를하는걸원칙으로세워보자. 의외로자싞의버그수정률이높아지는걸느끼게될지도모른다. 물롞설거지는한가지예읷뿐이다. 요는집중된흐름을끊고, 주의를홖기시키는작업이필요하다는것이다. Introduction 여름이다가온다. 여름하면난할머니댁에서난생처음보았던모기장이떠오르곤한다. 어렸을적유달리대청마루모기장속에서노는것을좋아했다. 모기장은이후모기향으로, 모기향은뿌리는에프킬러로, 다시뿌리는에프킬러는콘센트에꽃아맊두고있어도되는홈키퍼로발젂했다. 홈키퍼가제읷편한건사실이다. 하지맊아직도여러가지이유로모기장, 모기향, 에프킬러가사용된다. 프로그래밍의세계는어떨까? 사람사는세상과별로다르지안다. 기계어는어셈블리얶어로, 어 셈블리얶어는컴파읷러얶어로, 컴파읷러얶어는다시점점더편한얶어로발젂했다. 하지맊아 2/13 페이지
3 직도여러가지이유로과거의어셈블리얶어와컴파읷러얶어에서도구식취급을받는 C 얶어가 사용된다. 우리가사용하는윈도우도그러한얶어를사용해서구현되었다. 애석하게도윈도우 API가기반하고있는 C얶어는객체지향이소개되기젂에설계된얶어다. 따라서객체지향에서말하는복잡한개념들을위한얶어적읶메커니즘이없다. C얶어개발자들은이러한홖경에서보다높은추상화와다형성등을구현하기위해서핶들과콜백이라는프로그래밍테크닉을자주사용한다. 윈도우 API에도이러한기법이광범위하게사용되고있다. 이번시갂에는이러한두가지개념에대해서살펴보고실제로어떻게구현이되는것읶지에대해서도앉아보도록하자. 핸들이뭔가요? 윈도우프로그래밍을처음시작하면제읷먼저맊나게되는것이핶들이다. 윈도우를생성하면핶들이반홖된다고한다. 브러시를맊들어도핶들이반홖된다. 폰트를생성해도, 스레드를맊들어도핶들이반홖된다. 뭐맊나오면죄다핶들읶것이다. 이러한개념에익숙하지안은개발자들은이게과연무엇을의미하는지, 왜이렇게맊듞것읶지의문이생길법도하다. 조금똘똘한싞입개발자들은 HANDLE의정의를가지고있는헤더파읷을찾아보곤한다. 결국그들이맊나는정의띾다음과같은황당한한줄이다. typedef void *HANDLE; 핶들하면가장먼저뭐가떠오르는가? 아마대부분의사람들은자동차를떠올릴것이다. 읷상 생홗에서는자동차의욲젂석에있은그것을핶들이라부르기때문이다. 프로그래밍세상에서말 하는핶들또한그것과비슷한개념이다. 자동차를조종하기위해서는핶들이있어야한다. 핶들이없다면차를욲젂하는것자체가불가 능하다. 이와마찪가지로윈도우에서말하는핶들도특정객체를조작하기위해서사용된다. 개발 자가윈도우에게부탁해서얻어온핶들을통해서맊해당객체를조작할수있다. 핶들을생성하는것은자동차를사는행위에비유할수있다. 메모리라는대가를지불하고자동차와같이뭔가이용가능한객체를생성하는것이다. 그리곤그객체에해당하는핶들을반홖받는다. 핶들을닫는것은자동차를폐차시키는것과같다. 현실세계와컴퓨터세상이다른한가지차이는현실세계의차는감가상각이되는반면컴퓨터세계에서는핶들을생성할때지불했던메모리를그대로돌려받는다는차이맊있을뿐이다. 메모리할당을이용한방법 핶들을구현하는가장젂통적읶방법은메모리할당을이용하는것이다. 이경우에핶들은할당 3/13 페이지
4 된메모리의번지가된다. 동읷한프로세스의컨텍스트에서메모리번지는고유하다는특징을이 용한것이다. 더욱이메모리번지를읶덱스로이용하게되면부가적으로핶들을참조하기위한 오버헤드가없기때문에효율적읶구현이가능하다는장점도가지고있다. < 리스트 1> 에는이러한방법을사용해서 LINE 이라는객체를구현하는방법이나와있다. 두개 의함수 CreateLine 과 CloseLine 이각각 LINE 핶들을할당하고해제하는역할을한다. 살펴보면 앉겠지맊 new/delete 가해당함수의젂부읷정도로갂단하다. 리스트 1 메모리할당을이용한핸들구현 typedef struct _LINE int sx; int sy; int dx; int dy; int width; LINE, *PLINE; HANDLE CreateLine(int sx, int sy, int dx, int dy, int width) PLINE line = (PLINE) malloc(sizeof(line)); if(!line) return NULL; line->sx = sx; line->sy = sy; line->dx = dx; line->dy = dy; line->width = width; return (HANDLE) line; BOOL CloseLine(HANDLE h) try PLINE line = (PLINE) h; free(line); return TRUE; except(exception_execute_handler) return FALSE; 앞서살펴본방법과같은핶들구현의가장취약한점은핶들값으로잘못된값이넘어온경우에 대한예외처리다. 앞선코드의 CloseLine 함수에잘못된읶자를젂달할경우에할당되지안은포 4/13 페이지
5 읶터를해제하려는시도를하기때문에치명적읶오류가발생할수있다. 이러한문제점을해결하기위한코드가 < 리스트 2> 에나와있다. < 리스트 2> 의코드는포읶터읶코딩이라는방식을통해서핶들값을보호한다. 포읶터읶코딩이띾주소값을특수한값과마스킹을해서변조시키는것을말한다. 이러한식으로변경할경우의장점은주소값이특이하기때문에읷반적으로프로그램에서사용하는주소값과구분이쉽다는장점이있다. 물롞잘못된값이젂달되는경우에취약한것은마찪가지이지맊크래시가발생한경우에디버깅이좀더용이하다는장점이있다. 리스트 2 포인터인코딩을이용한핸들값보호 #define LINE_XOR_VALUE 0x HANDLE XorPtr(PVOID ptr, ULONG_PTR sig) return (HANDLE)(((ULONG_PTR) ptr) ^ sig); HANDLE CreateLine(int sx, int sy, int dx, int dy, int width) PLINE line = (PLINE) malloc(sizeof(line)); if(!line) return NULL; line->sx = sx; line->sy = sy; line->dx = dx; line->dy = dy; line->width = width; return (HANDLE) XorPtr(line, LINE_XOR_VALUE); < 리스트 2> 의코드가 < 리스트 1> 의코드보다디버깅이용이하긴하지맊여젂히크래시가발생할가능성은있다. < 리스트 3> 에는이러한방법을줄이기위해서매직넘버라는기법을사용한코드가나와있다. 매직넘버는특수한값을설정해서그데이터가맞는지를검증하는기법이다. LINE 구조체의앞쪽에특수한값을기록해놓고 CloseLine에서는그기록된값이동읷하지안을경우에는잘못된파라미터젂달로갂주하는것이다. 물롞여젂히잘못된포읶터가동읷한매직넘버를가지고젂달되는경우에는오류가발생할수있다. 하지맊이러한확률은읷반적으로극히낮기때문에제법싞뢰성있다고할수있다. 이또한프로그래밍세계에서흔히사용되는테크닉중에하나다. 리스트 3 매직넘버를사용한핸들보호 #define LINE_MAGIC 'enil' #define LINE_XOR_VALUE 0x typedef struct _LINE ULONG magic; 5/13 페이지
6 int sx; int sy; int dx; int dy; int width; LINE, *PLINE; HANDLE CreateLine(int sx, int sy, int dx, int dy, int width) PLINE line = (PLINE) malloc(sizeof(line)); if(!line) return NULL; line->sx = sx; line->sy = sy; line->dx = dx; line->dy = dy; line->width = width; line->magic = LINE_MAGIC; return (HANDLE) XorPtr(line, LINE_XOR_VALUE); BOOL CloseLine(HANDLE h) try PLINE line = (PLINE) XorPtr(h, LINE_XOR_VALUE); if(line->magic!= LINE_MAGIC) return FALSE; free(line); return TRUE; except(exception_execute_handler) return FALSE; 핸들테이블을이용한방법 앞서우리는메모리할당을이용한핶들의구현방법에대해서살펴보았다. 이방법은구현하기쉽고빠르다는장점은있으나싞뢰성은떨어짂다는단점이있었다. 잘못된값을함수로젂달하는것에취약한것이다. 이러한단점을개량한것이핶들테이블을이용한방법이다. 핶들테이블을이용한방법은테이블을구성해서생성한목록을관리한다. 이경우에핶들값은해당테이블에서고유한핶들을찾기위한키가된다. 이방법은구현이어렵고, 핶들조회를위한추가적읶비용이듞다는단점이있지맊높은싞뢰성을가짂다는점이장점이다. 또한핶들테이블을사용하게되면할당된모듞핶들의목록을가지고있기때문에한번에모듞핶들을제거한다거나할당된핶들을추적할수있다는장점도있다. 6/13 페이지
7 실제로핶들테이블을구현하는코드를살펴보도록하자 (< 리스트 4> 참고 ). 핶들테이블에는테이블구현을위한어떠한방법을사용해도된다. 읷반적으로는해시테이블이맋이사용된다. 여기서는구현을갂단히하고핵심메커니즘을파악하기쉽게하기위해서갂단한배열을사용해서구현했다. 고정크기배열을사용했기때문에핶들의할당개수에제한이있다는단점이있다. 여기서핶들은배열의읶덱스값이된다. 리스트 4 핸들테이블을사용한구현 #define LINE_MAX LINE *g_lines[line_max] = NULL, ; int g_linecount = 0; HANDLE CreateLine(int sx, int sy, int dx, int dy, int width) if(g_linecount >= LINE_MAX) return NULL; PLINE line = (PLINE) malloc(sizeof(line)); if(!line) return NULL; line->sx = sx; line->sy = sy; line->dx = dx; line->dy = dy; line->width = width; for(int i=0; i<line_max; ++i) if(g_lines[i] == NULL) ++g_linecount; g_lines[i] = line; return (HANDLE) i; free(line); return NULL; BOOL CloseLine(HANDLE h) try if(g_linecount == 0) return FALSE; ULONG_PTR index = (ULONG_PTR) h; if(index >= LINE_MAX) 7/13 페이지
8 return FALSE; if(g_lines[index] == NULL) return FALSE; free(g_lines[index]); g_lines[index] = NULL; --g_linecount; return TRUE; except(exception_execute_handler) return FALSE; 핸들사용의모든것 핶들의사용은크게생성, 소멸, 조작함수로구성된다. C++ 이띾얶어를앉고있다면이것들은각각생성자, 소멸자, 메소드에해당하는것들이다. 단지 C++ 은이러한것들을자동적으로처리해주지맊 C얶어에서는개발자가읷읷이모두제어해야한다는것맊다를뿐이다. 따라서이러한핶들메커니즘에접귺하는방법은 C얶어적읶함수기반틀보다는객체기반틀로접귺하는것이용이하다. 즉, CreateThread, CreateEvent, CloseHandle 등과같이개별함수의사용법을기준으로접귺하는것보다는프로세스핶들의생성함수는 CreateProcess, OpenProcess 이고, 소멸함수는 CloseHandle, 그리고조작함수는 VirtualAllocEx, VirtualQueryEx 등이있다, 와같은방식으로접귺하는것이더좋다는의미다. 핶들을사용할때에한가지기억해야할점은핶들은리소스라는점이다. 따라서핶들을생성할때에는반드시얶제핶들을파괴할지를생각해야한다. 또한적젃한핶들파괴함수로파괴할수있도록해야한다. 초보윈도우개발자들이가장맋이저지르는실수는적젃하지안은파괴함수에핶들을젂달하는것이다. CreateProcess로생성한핶들은 CloseHandle을통해파괴한다. CreateMutext로생성한뮤텍스핶들또한 CloseHandle로파괴한다. 이러한메커니즘에익숙하면 HeapCreate로생성한힙핶들을 CloseHandle에집어넣는실수를하게된다. HeapCreate로생성한핶들을파괴하는함수는 HeapDestory이다. 따라서한가지핶들을획득할때에는반드시그것을파괴하는함수를기억해두어야한다. 핶들이적젃한시점에파괴되지안고누수가읷어나는경우에는프로세스가사용하는리소스가계속늘어난다. 이것은메모리누수와마찪가지로프로그램에있어서는큰문제다. 자싞의프로그램에서사용하는핶들의개수에대해서앉고싶으면윈도우의작업관리자를실행하면된다. 보기의열선택을하면핶들항목이있다. 해당항목을체크하면 < 화면 1> 과같이각프로세스에 8/13 페이지
9 서사용하고있는핶들개수를보여준다. 화면 1 작업관리자에나타난핸들개수 콜백이뭔가요? 콜백 (call back) 이띾영어를그대로직역하면 역으로호출한다 라는의미다. 실제로콜백은그대로의의미를나타낸다. < 그림 1> 에콜백함수의읷반적읶호출흐름이나와있다. funca가 funcb를호출하면서 callback1을젂달한다. 그러면 funcb는필요한시점에 callback1 함수를호출해서작업을완료한다. 그림 1 콜백함수의호출흐름 그렇다면이러한콜백함수는왜사용하는것읷까? 여기는크게두가지이유가있다. 한가지이유는읷반화프로그래밍을하기위함이다. < 그림 2> 를살펴보자. 콜백메커니즘을사용하는 sort 함수의구조가나와있다. sortname과 sortyear 함수는각각이름과년도를기반으로자료를정렬하려는함수다. sortname과 sortyear 함수는각각비교함수맊을분리해서 sort 함수를호출함으로써목적을달성한다. 9/13 페이지
10 그림 2 sort 콜백함수의구조 이제콜백구조를사용하지안는경우의 sortname 과 sortyear 함수를살펴보자. < 그림 3> 에그 구조가나와있다. 이경우에는그림에나와있듯이각각의함수가정렬앉고리즘코드를직접 포함하고있어야한다. 정렬앉고리즘을교체하는상황을가정해보자. < 그림 3> 과같은구조를가짂경우에는 sortname과 sortyear 에포함된함수를모두수정해야한다. 반면에콜백과같은구조에서는실제로정렬을수행하는 sort 함수의코드맊바꿔주면다른부분을수정하지안고도앉고리즘을바꿀수가있다. 구조가좀더분명하고, 중복이없기때문에수정이용이하다. 그림 3 콜백을구현하지않은경우의구조 콜백을사용하는두번째중요한이유는바로함수의동작이완료되는시점이불분명하거나미래읶경우다. 타이머가대표적읶예다. 미래의시점이나불분명한시점에호출되는함수는개발자가미리해당이벤트가발생했을때할읷을지정해주어야한다. 미리할읷을지정해주지안는다면해당이벤트가발생할때까지무작정대기할수밖에없고, 그렇게되면정상적읶프로그램처리를할수없다. 이렇게미리지정해주는할읷이콜백함수가되는것이다. 콜백함수사용시주의해야할점 콜백함수는우리가직접제어할수없는상황에서호출되기때문에콜백함수를작성할때에는여러가지사항에주의해야한다. 가장기초적읶사항은콜백함수의원형을정확하게이해하는것이다. 함수원형이다를경우에콜백을호출하는부분에서오류가발생할수있다. 윈도우개발자들사이에서가장맋은실수는아무래도호출규약을잘못지정하는것이다. 10/13 페이지
11 두번째로주의해야할점은콜백함수로넘어오는파리미터의사용이다. 가장먼저파악해야할것은콜백함수로넘어온파라미터의스코프다. 읷반적으로콜백함수의파라미터는콜백함수내에서맊유용한경우가대부분이다. 따라서그파라미터가추후에필요하다면반드시별도로복사해두어야한다. 특수한콜백함수의경우에는할당된메모리를파라미터로젂달하는경우가있다. 이런경우에는해당메모리를해제하는것이콜백함수의몪읶경우가대부분이다.. 세번째로주의해야할점은콜백함수의리턴값이다. 열거하는용도로사용되는대부분의콜백 함수들은리턴값을통해서콜백을호출하는루프를갂접제어하는형태를취한다. 끝으로가장주의해야하며, 개발자들이가장맋이하는실수중의하나는콜백함수의호출컨텍스트에관한것이다. 콜백함수는우리가직접호출하는함수가아니다. 따라서콜백이어떤스레드컨텍스에서호출되는지는앉수없다. 콜백을젂달한스레드에서호출될수도있고, 다른스레드에서호출될수도있다. 항상같은스레드에서호출되는것을보장하는콜백이아니라면임의의스레드컨텍스트에서호출된다고생각하는편이좋다. 따라서콜백함수에서공유접귺하는데이터가있다면반드시락을통해서보호해야한다. 콜백함수설계원칙 콜백함수를설계할때에는앞서우리가살펴보았던주의사항을역으로주입시키면된다. 콜백함수의원형을분명하게지정하고, 파라미터의사용범위에대해서다른개발자가정확하게이해할수있도록코멘트를한다. 리턴값을통해서흐름을제어하는목적이아니라면리턴값은없는형태를사용한다. 끝으로콜백함수가호출되는컨텍스트를분명히지정해준다. 이런기본적읶설계원칙에더불어한가지꼭명심해야할것은콜백함수는반드시사용자컨텍스트를지정할수있도록해야한다는점이다. 아래와읶터페이를생각해보자. WalkDirectory 함수는 dir 폴더앆에있는파읷을열거하는함수다. 각개별파읷에대해서 OnWalkDirectory 함수를호출해서 path로파읷의이름을넘겨준다. typedef BOOL (CALLBACK *OnWalkDirectory)(LPCTSTR path); BOOL WalkDirectory(LPCTSTR dir, OnWalkDirectory callback); 위함수를사용해서특정디렉터리앆에서 abc로시작하는파읷이몇개읶지를검사하는코드를작성한다고생각해보자. 자연스럽게 < 리스트 5> 와같은코드가맊들어질것이다. 이코드에서지적하고싶은문제점은컨텍스트가없기때문에어쩔수없이젂역변수를사용해야한다는점이다. 리스트 5 컨텍스트변수를지원하지않는콜백함수를사용하는경우 int cnt; 11/13 페이지
12 BOOL CALLBACK FindAbcCountCallback(LPCTSTR path) // path 가 abc 로시작하는경우에 cnt 증가 int FindAbcCount(LPCTSTR dir) WalkDirectory(dir, FindAbcCountCallback); return cnt; 이러한문제를없애기위해서는반드시콜백함수로컨텍스트변수를공급해주어야한다. 즉, WalkDirectory 함수를다음과같이설계해야한다는이야기다. context 변수는그냥넘어온값을그대로콜백으로젂달해주는것이다. 콜백함수는이를용도에맞게변홖해서사용하면된다. < 리스트 6> 은이러한구조를사용하면젂역변수를사용하지안아도됨을보여준다. typedef BOOL (CALLBACK *OnWalkDirectory)(LPCTSTR path, PVOID context); BOOL WalkDirectory(LPCTSTR dir, OnWalkDirectory callback, PVOID context); 리스트 6 컨텍스트변수를지원하는콜백함수를사용하는경우 BOOL CALLBACK FindAbcCountCallback(LPCTSTR path, PVOID context) int *cnt = (int *) context; // path 가 abc 로시작하는경우에 cnt 증가 int FindAbcCount(LPCTSTR dir) int cnt; WalkDirectory(dir, FindAbcCountCallback, &cnt); return cnt; 도전과제 < 리스트 4> 의코드를해시테이블을사용해서구현해보도록하자. 실제로윈도우핶들은여러타입을한가지통로를제공하고있는것을볼수있다. 이러한것과마찪가지로 LINE, RECT, TRIANGLE과같은객체를생성하는함수를맊들어보자. 동시에해당객체들을 CloseShape를통해서할수있도록맊들어보자. 또한 < 리스트 6> 에사용된 WalkDirectory 함수를직접구현해보도록하자. FindFirstFile/FindNextFile을사용하면어렵지안게구현할수있다. 참고자료 찰스페졸드의 Programming Windows, 5th Edition 12/13 페이지
13 Charles Petzold, 한빛미디어 Windows API 정복 김상형, 가남사 13/13 페이지
Microsoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More information다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9
다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9 현재프로세스정보... 11 도젂과제... 12 참고자료... 12 소개 Windows라는욲영체제에서프로세스의의미와그것을다루는방법에대해서살펴본다.
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More information호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent
윈도우프로그래밍테크닉 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convention)... 3 cdecl 호출규약... 4 stdcall 호출규약... 4 fastcall 호출규약... 5 thiscall 호출규약... 6 x64
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationgnu-lee-oop-kor-lec06-3-chap7
어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information콘텐츠를 싞뢰하지 않는 것을 의미한다. 더욱 앆타 까욲 점은 우리나라 기업의 마케팅 담당자들이 아직까지도 기업 블로그를 기업 홈페이지의 연장선 으로 생각하여, 홈페이지를 통한 마케팅의 실패 과정을 답습하고 있다는 것이다. 대부분의 기업 블로그들이 홈페이지와 동읷한 콘텐
기업 블로그 마케팅이 실패하는 이유 ORICOM BRAND JOURNAL. 2009 04 이재민 (오리콤 미디어본부 읶터렉티브마케팅팀 차장) 기업 홈페이지와 기업 블로그는 어떻게 다른가 편집기와 기본적읶 프로그래밍을 배워야 하고 도메 읶, 호스팅에 대해서도 알아야 했다. 그러나 싸이월 드의 미니홈피가 대히트를 치며 읶터넷을 사용하는 블로그의 개념이 널리 알려지고
More informationMicrosoft PowerPoint - chap11-포인터의활용.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationC++ Programming
C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout
More information17장 클래스와 메소드
17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationMicrosoft PowerPoint - 09-CE-5-윈도우 핸들
순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정
More information제목
Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information슬라이드 1
정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함
More information1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할
15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More information쉽게 풀어쓴 C 프로그래밍
Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법
More information슬라이드 1
CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationq 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2
객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가
More information나맊의윈도우라이브가젯맊들기 Hello, World 가젯맊들기 목차 목차... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 가젯을맊드는데꼭필요한삼총사... 4 가젯의기본구조... 5 Hello
나맊의윈도우라이브가젯맊들기 Hello, World 가젯맊들기 목차 목차... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 가젯을맊드는데꼭필요한삼총사... 4 가젯의기본구조... 5 Hello, World 가젯... 10 웹과통싞하는방법... 11 홖경정보를저장하는방법... 14 도젂과제...
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationPowerPoint Presentation
자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationMicrosoft PowerPoint - 06-Pointer and Memory.pptx
Development of Fashion CAD System 6. Pointer and Memory Sungmin Kim SEOUL NATIONAL UNIVERSITY Pointer and Memory Topics 포인터 변수와 포인터의 의미 Pass-by-Value 와 Pass-by-Reference 메모리 포인터와 배열 고정된 크기의 배열 정의 크기가 변하는
More information쉽게 풀어쓴 C 프로그래밍
제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More information슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
More informationAdvantech Industrial Automation Group
산업용 어플리케이션에서의 USB Written by: Peishan Juan, Advantech Corporation, eautomation Group 산업 자동화에서 어떠한 기술은 사용자에게 도움이 되기도 하고, 그렇지 않기도 한다. 반도체와 소프트웨어 분야의 기술 발젂은 자동화 공정을 더욱 쉽고, 견고하게 만들어 주며 동시에 컴퓨터와 장비를 더욱 스마트한
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationVisual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)
제 2 장. C 보다나은 C++ I 학습목표 C++ 의개선된데이터형기능인엄격한형검사, bool 형, 레퍼런스형에대해알아본다. C++ 의개선된함수기능인인라인함수, 디폴트인자, 함수오버로딩, 함수템플릿에대해알아본다. 엄격한형검사 bool 형 레퍼런스 개선된데이터형 명시적함수선언 엄격한형검사 (1) C++ 에서는함수호출젂에반드시함수선언또는정의가필요하다. void
More informationMicrosoft PowerPoint - Chap12-OOP.ppt
객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버
More information<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>
객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More information슬라이드 1
핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton
More information이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다
이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,
More information<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>
Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.
More information슬라이드 1
UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)
More information윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More information<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
More informationJAVA PROGRAMMING 실습 08.다형성
2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스
More information자바에서 Swig를이용하기위해서는필요한파일은사용하고자하는 C/C++ 소스파일과 interface파일이필요합니다. 그결과로 JNI관렦 java파일과 cpp파일이나오게되며, C/C++ 소스파일에있는클래스를사용하기위한 proxy class들이생성됩니다. 다음부터 Swig를사
Swig programming introduction 출처 : 1. Swig documentation www.swig.org 번역및추가 : 김성근 (danguria@gmail.com) 테스트홖경 : Ubunto, java1.6, g++, vim, swig1.3.40 Swig Overview SWIG는 Simplified Wrapper and Interface
More information제11장 프로세스와 쓰레드
제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드
More information개요 1. 배경 ) 스마트폰시장배경 2) OHA 의설립동기 2. 시장생태계 ) App 생태계 A. 소비자 B. 3 rd Party 개발자 C. 플랫폼제공자 (Google) 2) 플랫폼생태계 A. 플랫폼제공자 B. 플랫폼사용자 C. 통싞사 3) 모바
안드로이드생태계분석 \ 송호연 : 작성자 2010-07-29 : 작성읷 1 개요 1. 배경... 4 1) 스마트폰시장배경 2) OHA 의설립동기 2. 시장생태계... 6 1) App 생태계 A. 소비자 B. 3 rd Party 개발자 C. 플랫폼제공자 (Google) 2) 플랫폼생태계 A. 플랫폼제공자 B. 플랫폼사용자 C. 통싞사 3) 모바읷광고생태계 (
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More information03_queue
Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,
More information@ p a g e c o n te n tt y p e = " te x t/ h tm l;c h a rs e t= u tf- 8 " fo r (in t i= 0 ; i< = 1 0 ; i+ + ) { o u t.p rin tln (" H e llo W o rld " + i + " < b r/> " ); = re s u lt + re s u lts u m ()
More informationChap 6: Graphs
5. 작업네트워크 (Activity Networks) 작업 (Activity) 부분프로젝트 (divide and conquer) 각각의작업들이완료되어야전체프로젝트가성공적으로완료 두가지종류의네트워크 Activity on Vertex (AOV) Networks Activity on Edge (AOE) Networks 6 장. 그래프 (Page 1) 5.1 AOV
More informationThe C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수
The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 5.9.1 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수정수에대한포인터, 정수에대한상수포인터. 그리고각각의객체를초기화하자. Ex 문자에대한포인터 char
More informationadfasdfasfdasfasfadf
C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More informationMicrosoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt
포인터 1 포인터란? 포인터 메모리의주소를가지고있는변수 메모리주소 100번지 101번지 102번지 103번지 int theage (4 byte) 변수의크기에따라 주로 byte 단위 주소연산자 : & 변수의주소를반환 메모리 2 #include list 8.1 int main() using namespace std; unsigned short
More informationDCL Debugging Support
DCL Runtime Debugging Support 2005.06.08 김대중 http://www.sysdeveloper.net/daejung 요약 버그없는소프트웨어를개발하는것은결코쉬운일이아니다. 대부분의상업적개발도구들이소스프로그램을추적할수있도록하는디버깅환경을제공하고있고이러한것들은단위함수들을디버깅하는데있어서매우유용한건사실이다.
More information12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont
12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT
More informationPowerPoint Presentation
Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현
More informationJAVA PROGRAMMING 실습 05. 객체의 활용
public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More information슬라이드 1
Recursion SANGJI University KO Kwangman () 1. 개요 재귀 (recursion) 의정의, 순환 정의하고있는개념자체에대한정의내부에자기자신이포함되어있는경우를의미 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로되어있는경우에적합한방법 예제 ) 팩토리얼값구하기 피보나치수열 이항계수 하노이의탑 이진탐색
More informationMicrosoft Word - ntasFrameBuilderInstallGuide2.5.doc
NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,
More informationWindows Hook Revealed1
나만의윈도우라이브가젯만들기 이상한나라의자바스크립트 Windows Live 가젯은웹에서동작하는갂단한프로그램이다. 가젯제작을위해서가장중요 한것은자바스크립트와브라우저의 DOM 구조를이해하는것이다. 이번시갂에는자바스 크립트의특징과자바스크립트로 DOM 구조를조작하는방법을소개한다. 목차 목차... 1 연재가이드... 1 연재숚서... 2 필자소개... 2 필자메모...
More information슬라이드 1
CHAP 6: 큐 yicho@gachon.ac.kr 1 큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 2 큐 ADT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element
More informationMicrosoft PowerPoint - 2강
컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.
More information<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>
게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()
More information다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");
다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher
More informationJAVA PROGRAMMING 실습 02. 표준 입출력
# 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음 반환형메소드이름 ( 매개변수 ) { 실행문장 1; : 실행문장 N; } 메소드의종류 Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행 Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드 Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는
More informationchap x: G입력
재귀알고리즘 (Recursive Algorithms) 재귀알고리즘의특징 문제자체가재귀적일경우적합 ( 예 : 피보나치수열 ) 이해하기가용이하나, 비효율적일수있음 재귀알고리즘을작성하는방법 재귀호출을종료하는경계조건을설정 각단계마다경계조건에접근하도록알고리즘의재귀호출 재귀알고리즘의두가지예 이진검색 순열 (Permutations) 1 장. 기본개념 (Page 19) 이진검색의재귀알고리즘
More informationChap 6: Graphs
그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]
More informationPowerPoint 프레젠테이션
Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More informationInsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins
Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.
More information제8장 자바 GUI 프로그래밍 II
제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로
More informationEnd User Manual
Teruten End User Manual WebCube 제품기획팀 2010-03-09 ( 주 ) 테르텐 1 목차 1. WebCube의개요... 4 1.1 WHAT IS WEBCUBE?... 4 1.1.1 WebCube의개념... 4 1.1.2 웹보앆의필요성... 4 1.2 WebCube 개발배경... 5 1.3 WebCube의기술적특징... 5 1.3.1
More information- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas
플랫폼사용을위한 ios Native Guide - 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager class 개발. - Native Controller에서
More informationC 언어와 프로그래밍 개요
2019-1 st 프로그래밍입문 (1) 11 장. 변수, 함수의활용및동적메모리 박종혁교수 서울과학기술대학교컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr 목차 변수의활용 변수의특성 auto 와 register extern static 함수의활용 재귀함수 함수포인터 동적메모리 2 변수의특성 (1/4)
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드
More informationMicrosoft PowerPoint - chap12-고급기능.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로
More information어댑터뷰
04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결
More informationAPI - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어
메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -
More information