Microsoft Word - ProC3.doc

Size: px
Start display at page:

Download "Microsoft Word - ProC3.doc"

Transcription

1 Pro*C 사용방법안내 (Ver 0.9) 이문서는오라클의 Pro*C/C++ Precompiler Programmer s Guide.pdf 문서의일부분을정리한것입니다. 보다자세한사용법은위문서를참고하시길바랍니다. 1

2 I. 개요..3 II. 환경설정.4 III. Pro*C/C++ 프로그램가이드 용어설명 삽입 SQL 문장의사용 변수선언 선언부 (declare section) SQL 문의사용법 SELECT 문 DML 문 커서의조작 VARCHAR 변수 호스트구조체 (host structure) 호스트배열 (host array) 지시변수 (indicator variable) INCLUDE 문 에러처리 WHENEVER문 sqlca의사용 oraca를이용하는방법 오라클접속및해제 접속 원격에서접속하는경우 접속종료 컴파일및실행 26 IV. 예제설명 Pro*C 예제 27 2

3 I. 개요 오라클의예비컴파일러 (precompiler) 는응용프로그램안에직접 SQL문을사용할수있게해주는도구이다. 예비컴파일러는소스프로그램을받아들여그속에삽읻 (embed) 된 SQL 문장을표준 Oracle runtime library 호출로바꾸어수정된프로그램소스코드를생성한다. 사용자는이소스코드를일반적인방법으로컴파일하고, 링크하고, 수행한다. 오라클은 C와 C++ 을위해 Pro*C/C++ 이라는예비컴파일러를제공하며일반적으로삽입 SQL문이포함된소스파일의확장자는.pc 이다. 이 pc 파일을예비컴파일러를통하여컴파일하면 C파일이생성된다. Pro*C를이용한응용프로그램의개발절차는아래그림과같다. 시스템에디터 소스프로그램 *.pc file( 삽입 SQL 문포함 ) Pro*C/C++ 예비컴파일러 수정된소스프로그램 *.c file( 삽입 SQL 문을라이브러리호출로변환 ) 컴파일러 (gcc 등 ) 오브젝트프로그램 링커 라이브러리호출해결 Oracle Runtime Library (SQLLIB) 실행프로그램 3

4 II. 환경설정 Redhat 리눅스를기반으로설명한다. pcscfg.cfg 파일은 ProC를사용하기위한시스템설정파일이다. $ORACLE_HOME/ precomp/admin 에 pcscfg.cfg 파일이있다. 이파일에다음과같은내용을추가한다. sys_include=($oracle_home/precomp/public, /usr/include, /usr/lib/gcc-lib/i386- redhat-linux/egcs /include) include=($oracle_home/precomp/public) include=($oracle_home/rdbms/demo) include=($oracle_home/network/public) include=($oracle_home/plsql/public) ltype=short sys_include 부분이두행에걸쳐있는데, 실제사용할때는한라인으로작성해야한다. /usr/lib/gcc-lib/i386-redhat-linx/egcs /include 부분은각자의리눅스환경에맞도록변경해야한다. /usr/lib/gcc-lib/i386-redhat-linux 디렉토리는대부분존재할것이다. 그다음하위디렉토리를여러분의환경에맞도록수정한다. 4

5 III. Pro*C/C++ 프로그램가이드 3.1 용어설명 - 호스트프로그램 : 삽입 SQL 문이포함된프로그램 - 호스트언어 : 삽입 SQL을포함한 C, C++, JAVA, COBOL 등을지칭 - 호스트변수 : 삽인 SQL문에서조건에사용되는값을전달하거나검색한값들을프로그램에전달하는변수 3.2 삽입 SQL 문장의사용 응용프로그램상에서, 완전한 SQL문장과완전한 C 문장을혼합해서사용할수있고, C의변수와구조체 (structure) 를 SQL 문에서사용할수있다. 호스트프로그램에서 SQL 문장을사용하려면, EXEC SQL이라는키워드를사용하여시작하고세미콜론으로종료한다. C의변수들을 SQL 문에서사용하려면다른 SQL 필드이름과구별하기위해콜론 (:) 을앞에붙여사용한다. EXEC SQL SELECT empno, ename, job INTO :empno, :ename, :job FROM emp WHERE deptno = :deptno ; 위의 SQL 문에서 SELECT 다음의 empno, ename, job 은 emp 테이블의필드이름을나타내며, INTO 다음의 empno, ename, job은호스트변수를의미한다. 즉위의문장은 emp 테이블에서주어진부서번호 (deptno) 에속하는직원들의번호 (empno), 이름 (ename), 직업 (job) 을가져와서호스트변수 empno, ename, job에저장하는것이다. 3.3 변수선언 호스트변수는아래의표 1 과같은타입으로선언할수있다. 데이타타입 설명 5

6 Char 한문자 Char[n] N개의문자배열 ( 문자열 ) int 정수 short 작은정수 long 큰정수 float 부동소수점수 ( 단정도형 ) double 부동소수점수 ( 배정도형 ) VARCHAR[n] 가변길이문자열 3.4 선언부 (declare section) 호스트변수를 C 언어의규칙에따라선언부에서선언해야한다. 예비컴파일옵션중 MODE=ORACLE 이면, 특별한선언부에선언할필요가없다. CODE=CPP 옵션이면 (C++ 을사용한다면 ), 반드시선언부가있어야한다. EXEC SQL BEGIN DECLARE SECTION; /* 모든호스트변수를선언 */ char *uid = "scott/tiger"; EXEC SQL END DECLARE SECTION; 선언부에는아래와같은것들을포함할수있다. - 호스트변수 - 호스트변수가아닌 C/C++ 변수 - EXEC SQL INCLUDE 문 - EXEC SQL ORACLE 문 - C/C++ 주석 3.5 SQL 문의사용법 SELECT 문 SELECT 문을실행할떄는 SELECT 문이반환하는데이타행의수를다루어야한다. SELECT 문장은아래와같이구분할수있다. 6

7 - 어떤행도반환하지않는질의 - 한행만반환하는질의 - 한행이상을반환하는질의 한행이상을반환하는질의는명시적으로선언된커서 (cursor) 나호스트배열의사용을필요로한다. 여기서는우선하나의행만을반환하는 SELECT 문에대해서언급한다. 커서의사용법은아래에서구체적으로다룬다. SELECT 문의예는아래와같다. EXEC SQL SELECT ename, job, sal INTO :emp_name, :job_title, :salary FROM emp WHERE empno = :emp_number; 오라클은 INTO 절에있는호스트변수들에반환 SELECT 문의반환값을저장한다. 주의할것은 SELECT 절에있는컬럼의수와 INTO 절에있는호스트변수의수가같아야한다 DML 문 INSERT, UPDATE, DELETE 문을사용하는방법은아래와같다. INSERT의경우 VALUE 절에적절한호스트변수를전달한다. UPDATE는 WHERE 절과 SET절에호스트변수를명세하여사용할수있고, DELETE는 WHERE 절에호스트변수를명세하면된다. EXEC SQL INSERT INTO emp (empno, ename, sal, deptno) VALUES (:emp_number, :emp_name, :salary, :dept_number); EXEC SQL UPDATE emp SET sal = :salary, comm = :commission WHERE empno = :emp_number; EXEC SQL DELETE FROM emp WHERE deptno = :dept_number ; 7

8 3.5.3 커서의조작 커서를다루기위해서는아래의명령이필요하다. 삽입 SQL 문 DECLARE OPEN FETCH CLOSE 설명커서의이름을명명하고, SELECT 문과연관시킴질의를수행하고, 결과집합을명시결과집합에서하나의행을가져오고, 커서를이동시킴커서를닫음 아래의예와같이 DECLARE CURSOR문을이용하여 emp_cursor라는이름의커서를정의한다. 커서와연관된 SELECT 문에 INTO 절을포함할수없다. 커서의경우 FETCH 명령에서 INTO 절을사용한다. EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT ename, empno, sal FROM emp WHERE deptno = :dept_number; 커서의선언은다른커서조작명령 (OPEN, FETCH, CLOSE) 보다앞에위치해야한다. 커서조작명령은하나의단위로컴파일되어야한다. 예를들어파일 A에서 DECLARE를하고파일 B에서 OPEN할수없다. 아래의예와같이 emp_cursor 를오픈할수있다. EXEC SQL OPEN emp_cursor; OPEN 명령은결과집합의첫번째행의바로앞을지정하고있는상태이다. FETCH 명령을이용하여결과집합에서행들을가져오고, 호스트변수의결과들을저장하도록한다. FETCH 명령은아래와같이사용할수있다. EXEC SQL FETCH emp_cursor INTO :emp_name, :emp_number, :salary; 여러결과를다가져오기위해서, 보통 FETCH 명령은아래처럼루프속에서사용된다. EXEC SQL WHENEVER NOT FOUND GOTO for (;;) 8

9 } EXEC SQL FETCH emp_cursor INTO :emp_name, :emp_number, :salary; printf( Name : %s, emp_name); /* 이름출력 */ 결과집합이비었거나더이상의행을가지고있지않다면, FETCH 명령은 no data found 에러를발생한다. 일반적으로위의예처럼무한루프를빠져나오기위해 WHENEVER NOT FOUND를사용하게된다. WHENEVER 문은에러처리에서자세히설명한다. 결과들을다가져왔으면, 자원을해제하기위해커서를종료한다. EXEC SQL CLOSE emp_cursor; int emp_number; char temp[20]; VARCHAR emp_name[20]; /* 호스트변수에값지정 */ printf("employee number? "); gets(temp); emp_number = atoi(temp); printf("employee name? "); gets(emp_name.arr); emp_name.len = strlen(emp_name.arr); EXEC SQL INSERT INTO EMP (EMPNO, ENAME) VALUES (:emp_number, :emp_name); VARCHAR 변수 가변길이문자열을선언하기위해 VARCHAR 슈도타입을사용한다. VARCHAR2 컬럼의값을처리할때, C의표준문자열보다 VARCHAR를사용하는것이더편리하다. VARCHAR를구조체로생각하면된다. 예를들어아래와같이 VARCHAR로선언하면예비 9

10 컴파일러는 arr 과 len 을멤버로갖는구조체로확장한다. VARCHAR username[20]; struct unsigned short len; unsigned char arr[20]; } username; VARCHAR를이용하면, SELECT나 FETCH 이후에명시적으로 VARCHAR 구조체의 len 필드를사용할수있다. 따라서아래와같은코드를사용하여 arr 필드에널 (null) 문자를추가하거나, 길이필드를이용하여 strncpy나 printf 함수를사용한다. username.arr[username.len] = 0 ; printf("username is %.*s n", username.len, username.arr); SQL 문에서는, 구조체이름에콜론 (:) 을붙여서 VARCHAR 변수를참조한다. int part_number; VARCHAR part_desc[40]; main() EXEC SQL SELECT pdesc INTO :part_desc FROM parts WHERE pnum = :part_number; 질의가실행된이후에, part_desc.len은 part_desc.arr에저장된문자열의실제길이를저장한다. C 문장에서는, 구조체의접근방식으로각각의필드들을이용한다. printf(" n nenter part description: "); 10

11 gets(part_desc.arr); /* INSERT나 UPDATE에서 VARCHAR를사용하기전에길이를설정해야한다. */ part_desc.len = strlen(part_desc.arr); 호스트구조체 (host structure) 호스트변수들을저장하기위해 C의구조체를사용할수있다. SELECT나 FETCH 문의 INTO절, INSERT 문의 VALUE 절에서호스트변수를저장하고있는구조체를참조할수있다. 구조체가호스트변수로사용될때, SQL 문에서는구조체의이름만사용되지만각각의필드들은 ORACLE에데이타를보내거나 ORACLE로부터데이타를받게된다. 아래는 emp 테이블에호스트구조체를사용하여데이타를추가하는예제이다. typedef struct char emp_name[11]; /* 컬럼길이보다하나크게선언 */ int emp_number; int dept_number; float salary; } emp_record; /* emp_record 타입의변수선언 */ emp_record new_employee; strcpy(new_employee.emp_name, "CHEN"); new_employee.emp_number = 9876; new_employee.dept_number = 20; new_employee.salary = ; EXEC SQL INSERT INTO emp (ename, empno, deptno, sal) VALUES (:new_employee ); 구조체에선언된필드들의순서와 SQL 문에서관련된컬럼들의순서가일치해야된다. 아래의예는순서가맞지않아서에러를발생하는예이다. struct int empno; float salary; 11

12 char emp_name[10]; } emp_record; /* 구조체필드의순서와대응되는컬럼순서의불일치 */ SELECT empno, ename, sal INTO :emp_record FROM emp; 호스트배열 (host array) 배열을사용하면, 하나의 SQL 문으로배열의전체원소를조작할수있다. 따라서특히네트워크환경에서, ORACLE 통신오버헤드가현저하게줄어든다. 예를들어, 300명의직원에관한정보를 EMP 테이블에추가하길원한다고하자. 배열이없다면 300개의 INSERT 문을실행해야한다. 배열을사용한다면, 하나의 INSERT 문으로가능하다. 배열은다음과같이선언한다. char emp_name[50][10]; int emp_number[50]; float salary[50]; VARCHAR v_array[10][30]; 문자배열 ( 스트링 ) 을제외하고는, SQL 문에서참조할수있는배열은 1차원으로제한되어 있이다.. int hi_lo_scores[25][25]; /* 허용되지않음 */ VARCHAR name[2][20]; /* 허용됨 */ char phone[2][14]; /* 허용됨 */ SELECT 문의 INTO 절에호스트배열을사용할수있다. SELECT 가반환하는행의최대수를안다면, 최대수만큼의호스트배열을선언하면된다. 아래의예와같이사용할수있다. char emp_name[50][20]; int emp_number[50]; float salary[50]; EXEC SQL SELECT ENAME, EMPNO, SAL INTO :emp_name, :emp_number, :salary FROM EMP 12

13 WHERE SAL > 1000; 위의예에서, SELECT 문은최대 50개의행만반환한다. 만약 50개의행이상을반환한다면, 위의방법으로모든행을가져올수없다. 더큰배열을사용하거나커서를선언한후 FETCH 문을사용해야한다. 호스트배열을 INSERT 문에서사용하는예는아래와같다. char emp_name[50][20]; int emp_number[50]; float salary[50]; /* 호스트배열에데이타지정 */ EXEC SQL INSERT INTO EMP (ENAME, EMPNO, SAL) VALUES (:emp_name, :emp_number, :salary); UPDATE 문에도호스트배열을사용할수있다. int emp_number[50]; float salary[50]; /* 호스트배열에데이타지정 */ EXEC SQL UPDATE emp SET sal = :salary WHERE EMPNO = :emp_number; 호스트배열을호스트구조체의필드로사용할수있다. struct char emp_name[3][10]; int emp_number[3]; int dept_number[3]; } emp_rec; strcpy(emp_rec.emp_name[0], "ANQUETIL"); strcpy(emp_rec.emp_name[1], "MERCKX"); strcpy(emp_rec.emp_name[2], "HINAULT"); emp_rec.emp_number[0] = 1964; emp_rec.dept_number[0] = 5; emp_rec.emp_number[1] = 1974; emp_rec.dept_number[1] = 5; emp_rec.emp_number[2] = 1985; emp_rec.dept_number[2] = 5; 13

14 EXEC SQL INSERT INTO emp (ename, empno, deptno) VALUES ( :emp_rec); 지시변수 (indicator variable) 모든호스트변수에부가적인지시변수를관련시킬수있다. 일반적으로지시변수는입력으로사용되는호스트변수에 NULL을할당하고, 출력으로사용되는호스트변수에 NULL 이오거나잘려진값이저장되는지검사하기위해사용된다. 모든지시변수는 2 바이트숫자형 (short) 로선언되어야한다. SQL에서사용법은아래와같다. :host_variable INDICATOR :indicator_variable 또는 :host_variable:indicator_variable 지시변수값의의미는아래표와같다. 값의미 0 연산이성공적으로수행됨 -1 NULL이반환되거나, 삽입되거나, 변경됨 -2 호스트변수에잘려진값이저장되고, 컬럼값의원래길이도알수없음 > 0 호스트변수에잘려진값이저장되고, 반환된값은컬럼값의원래길이를의미 아래의예와같이지시변수 SELECT 문에서사용할수있다. EXEC SQL BEGIN DECLARE SECTION; int emp_number; float salary, commission; short comm_ind; /* 지시변수 */ EXEC SQL END DECLARE SECTION; char temp[16]; float pay; /* SQL 문에서사용되지않는변수들 */ printf("employee number? "); gets(temp); emp_number = atof(temp); EXEC SQL SELECT SAL, COMM INTO :salary, :commission:ind_comm 14

15 FROM EMP WHERE EMPNO = :emp_number; if(ind_comm == -1) /* commission 이 NULL인지확인 */ pay = salary; else pay = salary + commission; INSERT에 NULL을주기위해서아래와같이사용할수있다. 아래의예는사용자의입력에따라 emp_number의값을유연하게입력하는것을보여준다. printf("enter employee number or 0 if not available: "); scanf("%d", &emp_number); if (emp_number == 0) ind_empnum = -1; else ind_empnum = 0; EXEC SQL INSERT INTO emp (empno, sal) VALUES ( :emp_number:ind_empnum, :salary); INCLUDE 문 삽입 SQL을이용하여응용프로그램을작성하기위해서는 sqlca.h나 oraca.h 파일을포함해야한다. 아래와같은방법으로포함할수있다. #include <sqlca.h> #include <oraca.h> 또는 EXEC SQL INCLUDE sqlca; EXEC SQL INCLUDE oraca; 여기서 sqlca는 SQL Communication Area를뜻하며내부적으로는 sqlca라는구조체가선언된화일이다. 데이타베이스는 SQL문의실행이끝날때마다 sqlca 구조체에알맞은값을지정하여호스트프로그램에서참조할수있게해, 데이타베이스와호스트프로그램사이의통신역할을하게한다. sqlca에담겨지는정보는경고메시지, 에러발생여부및에러코드등이다. 자세한내용은다음절에서설명하고있다. oraca(oracle Communication Area) 는 sqlca라는 SQL 표준에덧붙여서오라클에서확장한구조체로서 sqlca에서제공되는정보외에추가로필요한정보를호스트프로그램에게제공하기위한구조체이다. 이 oraca를사용하기위해서는다음과같은문장을통해 ORACA=YES라는값을지정하여 15

16 oraca 를활성화시켜야한다. EXEC ORACLE OPTION (ORACA=YES); 그러나, ORACA를사용하면프로그램실행시추가작업으로인한부담이늘어나므로보통의경우에는위의문장을생략해서기본값인 ORACA=NO로지정하여 oraca를활성화시키지않는다. 3.6 에러처리 Pro*C/C++ 을이용한응용프로그램작성에서 SQL문의실행에따른에러처리및진단의방법은크게세가지로나눌수있다. - WHENEVER문을이용하는방법 - sqlca를이용하는방법 - oraca를이용하는방법 WHENEVER 문 WHENEVER 문의구문은다음과같다. EXEC SQL WHENEVER <condition> <action>; <condition> 에는아래의표와같은것을사용할수있다. 조건의미 SQLWARNING 경고메시지가발생한경우 SQLERROR 에러가발생한경우 NOT FOUND WHERE절의조건을만족하는행을발견할수없거나, SELECT INTO나 FETCH가어떤행도반환하지않은경우 <action> 에는아래의표와같은것을지정할수있다. 조치 CONTINUE DO DO BREAK 의미프로그램은다음문장을수행함. 디폴트동작으로 WHENEVER를쓰지않은경우와같음에러처리함수를수행. 에러처리함수수행후실패한 SQL문의다음문장으로제어가넘어감실제적인 break 문장. 루프에서사용 16

17 DO CONTINUE 실제적인 continue 문장. 루프에서사용 GOTO label_name 레이블로제어이동. STOP 프로그램수행을종료하고, 트랜잭션은롤백됨 WHENEVER문이정의되면그이후의 SQL문을실행할때마다 < 조건 > 에해당되는지를검사하고해당되면사건이일어날때마다 < 조치 > 에정의된동작을취하게된다. 이 WHENEVER문은다른조건이나조치로구성된 WHENEVER문을만날때까지계속유효하게동작한다. WHENEVER문의사용예를보자. main().. EXEC SQL DECLARE emp_cursor CURSOR FOR /* 커서설정 */ SELECT empno, ename FROM emp; EXEC SQL OPEN emp_cursor; /* 커서를연다 */ } EXEC SQL WHENEVER NOT FOUND DO break; while(1) EXEC SQL FETCH emp_cursor INTO :emp_number, :emp_name;. } EXEC SQL CLOSE emp_cursor; /* 커서를닫는다 */. 위예의 while루프에서 FETCH문이실행될때더이상레코드가발견되지않으면 WHENEVER문의조치에의해루프를빠져나오게된다. main() EXEC SQL WHENEVER SQLERROR DO sql_error(" 에러메시지 "); EXEC SQL SELECT. 17

18 } EXEC SQL UPDATE.. sql_error(char * errmasage) printf(" 에러 %s n", errmasage); exit(-1); } 위예에서는 WHENEVER문이정의된이후에실행되는 SQL문에서에러가발생하면 sql_error() 라는함수를실행하게된다. 즉 SELECT가실패해도 sql_error() 가호출되고, UPDATE가실패해도 sql_error() 가호출된다. 또다음과같은예를보자. /* 무한루프에빠지는예 */ EXEC SQL WHENEVER NOT FOUND GOTO no_more; while(1) EXEC SQL FETCH emp_cursor INTO :emp_number, :emp_name; } no_more: EXEC SQL DELETE FROM emp WHERE empno=:emp_number;. } 위의예를보면 FETCH에서더이상해당되는행이없는경우 no_more로넘어가게되고 no_more 다음의 DELETE문에서다시 NOT FOUND조건에해당되는경우다시 no_more 로넘어가서무한루프에빠지게되는것을알수있다. 아래의예와같이 GOTO 를다시설정하여무한루프를방지한다. EXEC SQL WHENEVER NOT FOUND GOTO no_more; 18

19 for (;;) EXEC SQL FETCH emp_cursor INTO :emp_name, :salary; } no_more: EXEC SQL WHENEVER NOT FOUND GOTO no_match; EXEC SQL DELETE FROM emp WHERE empno = :emp_number; no_match: sqlca 의사용 SQLCA는구조체이다. SQLCA의필드는에러, 경고, SQL이수행될때마다오라클이갱신하는상태정보를담고있다. 따라서 SQLCA는가장최근의 SQL 연산의결과를반영한다. SQLCA를사용하기위해서는아래와같은문장을포함해야한다. EXEC SQL INCLUDE SQLCA; 또는 #include <sqlca.h> sqlca 구조체의구조는다음과같다. struct sqlca char sqlcaid[8]; /* "SQLCA" 문자스트링 */ long sqlabc; /* slqca구조체의길이 */ long sqlcode; /* 에러코드 */ struct unsigned short sqlerrml; /* 에러메시지길이 */ char sqlerrmc[70]; /* 에러메시지내용 */ } sqlerrm; char sqlerrp[8]; /* reserved */ long sqlerrd[6]; /* sqlerrp[0] : reserved sqlerrp[1] : reserved 19

20 sqlerrd[2] : 수행된행의개수 sqlerrd[3] : reserver sqlerrd[4] : 파싱에러옵셋 sqlerrd[5] : reserved */ char sqlwarn[8]; /* sqlwarn[0] : 경고플래그 sqlwarn[1] : 문자스트링이절단된경우 sqlwarn[2] : 안쓰임. sqlwarn[3] : SELECT문에서필드개수와 INTO문의호스트변수개수가일치하지않음 sqlwarn[4] : DELETE 또는 UPDATE문에서 where절이없음. sqlwarn[5] : reserved sqlwarn[6] : 안쓰임. sqlwarn[7] : 안쓰임. */ char sqlext[8]; /* reserved */ }; sqlca.sqlcode는 SQL문실행시발생한 에러코드이며그값에따라다음과같은뜻이있 다. Sqlcode 값 의미 0 성공 양수 SQL문의실행에는성공했지만예외상황이발생한경우이다. SELECT INTO 또는 FETCH문에서 WHERE절의조건에만족하는행이없는경 우에양수의 sqlcode가반환된다. 음수 SQL문의실행에실패한경우이다. 따라서대부분의경우트랜잭션을복 귀 (rollback) 하여야한다. sqlca.sqlcode를통해알아낸에러코드의의미와원인및조치를알고싶으면 prompt상에서 oerr라는명령을사용한다. oerr 명령은두개의인수를사용한다. 첫번째는에러메시지를발생시킨요소의코드 ( 예를들어 ora는오라클서버 ) 이며두번째인수는에러코드번호이다. prompt> oerr ora 에러코드의절대값 20

21 여기서에러코드는절대값을입력하여야한다. 즉, 다음과같이 -942 에러가발생하였다면 942를입력하여야한다. prompt> oerr ora 942 sqlwarn[0] 부터 sqlwarn[7] 까지는경고에관한요소이며이들을참조함으로써보다상세한제어를할수있다. sqlca.sqlerrd[2] 는 SQL문의영향을받은행의개수를담고있다. 즉, SELECT, DELETE, UPDATE문등의실행결과가반영된행의개수를말하며 sqlca.sqlcode와더불어가장많이참조되는요소이다. sqlca.sqlerrm.sqlerrmc는에러메시지를담고있으며이를참조하여다음과같이에러메시지를출력할수있다. sqlca.sqlerrm.sqlerrmc[sqlca.sqlerrm.sqlerrml]=' 0'; printf("%s", sqlca.sqlerrm.sqlerrmc); sqlerrmc에는최대 70자까지의에러메시지만저장되므로, 에러메시지전체를알고싶으면 sqlglm() 을사용할수있다. sqlglm() 의구문은다음과같다. sqlglm(message_buffer, &buffer_size, &message_length); 여기서각매개변수의뜻은다음과같다. - message_buffer : 에러메시지가담겨질문자배열. - buffer_size : message_buffer의크기. - message_length : message_buffer에담겨진메시지의크기. 예를보자. main() char msg_buffer[100]; int buf_size = 100; int msg_length; 21

22 } if (sqlca.sqlcode!=0) sqlglm( msg_buffer, &buf_size, &msg_length); msg_buffer[msg_length] = ' 0'; printf("%s", msg_buf); } oraca 를이용하는방법 SQLCA가제공하는런타임에러와상태변화와같은정보를더자세히알고싶을때, ORACA를사용한다. ORACA는확장된진단툴을제공한다. 그러나 ORACA는런타임오버헤드를추가하므로, ORACA를선택적으로사용한다. ORACA를선언하기위해서는아래와같은문장을프로그램에추가해야한다. EXEC SQL INCLUDE ORACA; 또는 #include <oraca.h> ORACA 를활성화하려면, ORACA 옵션을명세해야한다. EXEC ORACLE OPTION (ORACA=YES); ORACA 구조체의정보는다음과같다. struct oraca char oracaid[8]; /* "ORACA" 문자스트링 */ long oracabc; /* oraca의크기 */ long oracchf; /* 커서캐쉬일관성플래그 */ long oradbgf; /* 마스터디버그플래그 */ long orahchf; /* 히프일관성플래그 */ long orastxtf; /* Save-SQL-statement 플래그 */ struct unsigned short orastxtl; /* 현재 SQL문의길이 */ char orastxtc[70]; /* 현재 SQL문의내용 */ 22

23 } orastxt; struct char orasfnmc[70]; /* 현재 SQL문을담고있는화일이름 */ unsigned short orasfnml; /* 화일이름의길이 */ } orasfnm; long oraslnr; /* 현재 SQL문이위치한행번호 */ long orahoc; /* 요청한 MAXOPENCURSORS 값 */ long oramoc; /* 최대로 open할수있는커서개수 */ long oracoc; /* 현재사용되고있는커서개수 */ long oranor; /* 재할당된커서캐쉬의개수 */ long oranpr; /* 파싱된 SQL문의개수 */ long oranex; /* 실행된 SQL문의개수 */ }; ORACA를사용한예는아래와같다. #include <sqlca.h> #include <oraca.h> main() char SQLSTATE[6]; EXEC SQL WHENEVER SQLERROR DO sql_error("oracle error"); EXEC SQL CONNECT :userid; EXEC ORACLE OPTION (ORACA=YES); oraca.oradbgf = 1; /* debug 연산활성화 */ oraca.oracchf = 1; /* 커서캐시통계정보수집 */ oraca.orastxtf = 3; /* 항상 SQL문저장 */ printf("enter department number: "); ); void sql_error(char *errmsg) char buf[6]; 23

24 } strcpy(buf, SQLSTATE); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL COMMIT WORK RELEASE; if (strncmp(errmsg, "Oracle error", 12) == 0) printf(" n%s, sqlstate is %s n n", errmsg, buf); else printf(" n%s n n", errmsg); printf("last SQL statement: %.*s n", oraca.orastxt.orastxtl, oraca.orastxt.orastxtc); printf(" nat or near line number %d n", oraca.oraslnr); printf(" ncursor Cache Statistics n n"); printf("maximum value of MAXOPENCURSORS: %d n", oraca.orahoc); printf("maximum open cursors required: %d n", oraca.oramoc); printf("current number of open cursors: %d n", oraca.oracoc); printf("number of cache reassignments: %d n", oraca.oranor); printf("number of SQL statement parses: %d n", oraca.oranpr); printf("number of SQL statement executions: %d n", oraca.oranex); exit(1); 3.7 오라클접속및해제 접속 오라클에질의를하거나데이타를조작하기전에데이타베이스에접속을해야한다. 접속을하기위해 CONNECT 문을사용한다. 아래는간단하게접속을하는방법을보여준다. 처음예에서 username이나 password는 char 또는 varchar 호스트변수이다. 밑의예에서 usr_pwd는사용자명과암호를 scott/tiger 처럼슬래쉬 (/) 로구분해서포함해야한다. EXEC SQL CONNECT :username IDENTIFIED BY :password ; 또는 EXEC SQL CONNECT :usr_pwd ; 아래의예는오라클의사용자 scott( 암호는 tiger) 로접속하는코드이다. 24

25 char *username = "SCOTT"; char *password = "TIGER"; EXEC SQL WHENEVER SQLERROR EXEC SQL CONNECT :username IDENTIFIED BY :password; 여기서 CONNECT 문에문자열을직접주면에러가발생한다. EXEC SQL CONNECT scott IDENTIFIED BY tiger ; /* 에러발생!!! */ 원격에서접속하는경우원격에서오라클서버를접속하려면 ( 예를들어 Pro*C/C++ 프로그램은 db.snu.ac.kr에있고, 오라클서버는 dbpub.snu.ac.kr에있는경우 ), 먼저 tnsname.ora 파일을편집한다. tnsname.ora 는 $ORACLE_HOME/network/admin ( 리눅스에서설치한경우 ) 밑에위치한다. dbpub = ( DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbpub.snu.ac.kr)(port = 1521)) (CONNECT_DATA = (SERVICE_NAME = ora9i)) ) % 주의 : 이설정은서버마다다르기때문에, 관리자가알려준사항을따라야한다. 원격에서접속할때 CONNECT 문에옵션을하나추가한다. /* 호스트변수설정 */ char username[10] = "scott"; char password[10] = "tiger"; char db_string[20] = "dbpub"; /* 원격 DB에접속 */ EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string; 접속종료 오라클과의접속을해제할경우에는다음과같이두가지문장을사용할수있다. 25

26 1 EXEC SQL COMMIT 1 WORK RELEASE; 2 EXEC SQL ROLLBACK WORK RELEASE; 첫번째문장은프로그램내의 SQL문을 commit하고접속을해제하는경우이고두번째문장은 rollback한뒤접속을해제하는경우이다. RELEASE는자원을해제하고 log off하라는의미이다. 일반적으로프로그램이정상적으로수행된경우에는첫번째문장을이용하여접속을끊고, 에러발생시프로그램이종료되는경우에는두번째문장으로접속을끊는다. 3.8 컴파일및실행 sample1.pc 파일을 proc 를이용하여예비컴파일한다. $proc sample1.pc 예비컴파일하면 sample1.c 파일이생성된다. sample1.c 파일을 gcc를이용하여컴파일한다. 이때오라클관련라이브러리들을포함한다. $gcc -o sample1 -I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib -lclntsh sample1.c -I( 대문자 i) 는 gcc의옵션으로헤더파일의디렉토리경로를지정한다. 여기서는 sqlca.h와 oraca.h 등의오라클관련헤더파일들의위치한 $ORACLE_HOME/precomp/public을포함하도록하고있다. -L은 gcc의옵션으로라이브러리가위치한디렉토리경로를지정한다. 여기서는 $ORACLE_HOME/lib를포함하고있다. -l( 소문자 L) 은 gcc의옵션으로라이브러리를지정한다. 여기서는 clntsh 라이브러리를가리킨다. $ORACLE_HOME/lib 밑에있는 libclntsh.so 라는공유라이브러리 (shared library) 를포함하라는의미이다. 컴파일이끝나면, sample1 이라는실행파일이생성된다. 1 COMMIT 과 ROLLBACK 은트랜잭션에서나오는용어이다. 트랜잭션의의미는 DB 책들을참고한다. COMMIT 과 ROLLBACK 에대한자세한사용법은 ProC.pdf 의 3 장을참고한다. 26

27 IV. 예제설명 4.1 Pro*C 예제 오라클에서제공하는 sample3.pc 파일을설명한다. 이예제는커서의사용법을보여주고있다. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlca.h> #define NAME_LENGTH 8 #define ARRAY_LENGTH 5 /* 사용자명 */ char *username = "SCOTT"; char *password = "TIGER"; /* 호스트구조체의선언 */ struct int emp_number[array_length]; char emp_name[array_length][name_length]; float salary[array_length]; } emp_rec; void print_rows(int n) int i; printf(" nnumber Employee Salary"); printf(" n n"); 27

28 for (i = 0; i < n; i++) printf("%d %s %8.2f n", emp_rec.emp_number[i], emp_rec.emp_name[i], emp_rec.salary[i]); } void sql_error(char* msg) EXEC SQL WHENEVER SQLERROR CONTINUE; printf(" n%s", msg); printf(" n%.70s n", sqlca.sqlerrm.sqlerrmc); } EXEC SQL ROLLBACK WORK RELEASE; exit(exit_failure); void main() int num_ret; /* 반환된행의수 */ /* 오라클에접속 */ EXEC SQL WHENEVER SQLERROR DO sql_error("connect error:"); EXEC SQL CONNECT :username IDENTIFIED BY :password; printf(" nconnected to ORACLE as user: %s n", username); EXEC SQL WHENEVER SQLERROR DO sql_error("oracle error:"); /* 커서선언 */ EXEC SQL DECLARE c1 CURSOR FOR SELECT empno, ename, sal FROM emp; EXEC SQL OPEN c1; num_ret = 0; /* 초기하 */ 28

29 /* fetch 루프 */ EXEC SQL WHENEVER NOT FOUND DO break; for (;;) EXEC SQL FETCH c1 INTO :emp_rec; } print_rows(sqlca.sqlerrd[2] - num_ret); num_ret = sqlca.sqlerrd[2]; /* num_ret 재설정. */ /* 마지막 ftech후남아있는행이있다면, 남아있는행들을출력 */ if ((sqlca.sqlerrd[2] - num_ret) > 0) print_rows(sqlca.sqlerrd[2] - num_ret); EXEC SQL CLOSE c1; printf(" nau revoir. n n n"); } /* 접속해제 */ EXEC SQL COMMIT WORK RELEASE; exit(exit_success); 29

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

12주-proc.PDF

12주-proc.PDF 12 : Pro*C/C++ 1 C/C++, Cobol, Fortran, Ada, Pascal 3GL SQL Pre-Compiler,, SQL PL/SQL C Pro*C Pro*C C++ Oracle 8 ProC/C++ Pro*C/C++ 11 Pro*C, Pro C, C/C++ Pro C / cc gcc, C++ Pro*C SQL ANSI SQL 8, ANSI

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<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 information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft 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

슬라이드 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 information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft 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 information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 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 information

ESQL/C

ESQL/C 20 장. PL/SQL 커서 주요내용 암시적커서 명시적커서선언 명시적커서열기및닫기 명시적커서에서데이터 Fetch 커서의속성 (%ISOPEN, %ROWCOUNT, %FOUND, %NOTFOUND) 커서 FOR 루프 PL/SQL 의커서 (Cursor) 커서 SQL 문과프로그램실행과정에서결과를저장할수있는오라클메모리구조 ( 개별 SQL 작업영역 ) 암시적커서 (Implicit

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

chap 5: Trees

chap 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 information

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

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

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft 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 information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.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

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft 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 information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 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

Microsoft Word - 04_EXCEPTION.doc

Microsoft Word - 04_EXCEPTION.doc ORACLE EXCEPTION INTRODUCTION PLSQL 블록이 PARSE 되는동안에발생되는에러를컴파일에러 (Compilation Error) 라고부르며, PLSQL 블록이실행되는동안에발생되는에러를런타임에러 (Run-Time Error) 라고부르는데, 이런타임에러를오라클에서는예외 (Exception) 라고부른다. 오라클의예외 (Exception) 는크게두가지로구분된다.

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft 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

Microsoft PowerPoint - 10Àå.ppt

Microsoft PowerPoint - 10Àå.ppt 10 장. DB 서버구축및운영 DBMS 의개념과용어를익힌다. 간단한 SQL 문법을학습한다. MySQL 서버를설치 / 운영한다. 관련용어 데이터 : 자료 테이블 : 데이터를표형식으로표현 레코드 : 테이블의행 필드또는컬럼 : 테이블의열 필드명 : 각필드의이름 데이터타입 : 각필드에입력할값의형식 학번이름주소연락처 관련용어 DB : 테이블의집합 DBMS : DB 들을관리하는소프트웨어

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r -------------------------------------------------------------------- -- 1. : ts_cre_bonsa.sql -- 2. :

More information

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드] Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 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 information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft 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

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

InsertColumnNonNullableError(#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

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

Microsoft Word - PLSQL.doc

Microsoft Word - PLSQL.doc PL/SQL 2008 DB system and programming 보충자료 PL/SQL의실행절 BEGIN 절에서의몇가지규칙 - 실행문은여러라인에걸쳐사용할수있다. - 변수명의명명규칙은오라클의일반적인명명규칙과동일하다. PL/SQL 블록내에서 SQL 문을사용할때에는컬럼명과같은변수명은피해야한다. - SQL에서와마찬가지로날짜와문자는홑따옴표 ( ) 를사용하여인용하여야한다.

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A 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

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을 (structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

Tibero

Tibero Tibero tbesql/cobol 안내서 Tibero 5 Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2013 TIBERO Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 272-6 우 ) 463-824 Restricted

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft 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

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

C 프로그래밊 개요

C 프로그래밊 개요 구조체 2009 년 5 월 19 일 김경중 강의계획수정 일자계획 Quiz 실습보강 5 월 19 일 ( 화 ) 구조체 Quiz ( 함수 ) 5 월 21 일 ( 목 ) 구조체저녁 6 시 5 월 26 일 ( 화 ) 포인터 5 월 28 일 ( 목 ) 특강 (12:00-1:30) 6 월 2 일 ( 화 ) 포인터 Quiz ( 구조체 ) 저녁 6 시 6 월 4 일 ( 목

More information

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor 19. 전처리와분할컴파일 순천향대학교컴퓨터학부이상정 1 학습내용 전처리명령어 #include #define 기호상수 const 분할컴파일 순천향대학교컴퓨터학부이상정 2 전처리과정 전처리 (preprocessor) 전처리명령어는 # 기호로시작 #incldue #define 순천향대학교컴퓨터학부이상정 3 #include (1) 지정된파일을프로그램에삽입 꺽쇠괄호는포함할파일을컴파일러에설정되어있는특정디렉토리에서검색

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Microsoft Word - SQL튜닝_실습교재_.doc

Microsoft Word - SQL튜닝_실습교재_.doc * 실습환경 * 1. 오라클데이터베이스의튜닝실습을하기위해서는기본적인테이블과데이터가필요합니다. 다음과같은절차에의해환경설정을하십시오. 1) 강사가제공하는 Export 된파일 (scott.dmp) 을자신의 ORACLE 경로에저장하십시오. [C: ] cd C: ORACLE ORA92 BIN [C: ] dir scott.dmp scott.dmp 2) SYSTEM 사용자로접속하여

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Chapter #01 Subject

Chapter #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

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4> 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

PowerPoint Template

PowerPoint Template 10 포인터 1 주소 Address( 주소 ) 메모리에는그메모리의저장장소의위치를나타내는주소값 주소 (address) 는 1 바이트마다 1 씩증가하도록메모리에는연속적인번호가구성 2 주소연산자 & & 변수 변수의주소값을알아내려면변수앞에주소연산자 & (ampersand) 를이용 주소값이용장단점 주소값을이용하면보다편리하고융통성있는프로그램이가능 그러나복잡하고어려운단점

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 #define _CRT_SECURE_NO_WARNINGS #include #include main() { char ch; printf(" 문자 1개를입력하시오 : "); scanf("%c", &ch); if (isalpha(ch))

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2 5 장 SQL 응용 데이터베이스실험실 1 [ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL 5.2.1 T-SQL 문법 5.3 JAVA 프로그래밍 2 5.1 데이터베이스프로그래밍개념 프로그래밍 이라고하면프로그램소스를설계하고, 작성하고, 디버깅하는과정을말한다. 프로그램 혹은소프트웨어는컴퓨터에서주어진작업을하는명령어나열을말한다. 데이터베이스프로그래밍은명확한정의는없지만데이터베이스에데이터를정의하고,

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A 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

untitled

untitled while do-while for break continue while( ) ; #include 0 i int main(void) int meter; int i = 0; while(i < 3) meter = i * 1609; printf("%d %d \n", i, meter); i++; return 0; i i< 3 () 0 (1)

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

PowerPoint Presentation

PowerPoint Presentation #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

문서 템플릿

문서 템플릿 HDSI 툴분석 [sql injection 기술명세서 ] Sql injection 기술명세서 Ver. 0.01 이문서는 sql injection 기술명세가범위입니다. Copyrights Copyright 2009 by CanvasTeam@SpeeDroot( 장경칩 ) All Rights Reserved. 장경칩의사전승인없이본내용의전부또는일부에대한복사, 전재,

More information

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - Chapter_08.pptx 프로그래밍 1 1 Chapter 8. Pointers May, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 포인터의개념 (1/6) 2 포인터란 : 다른객체를가리키는변수 객체의메모리주소를저장하는변수 기호적방식 (symbolic way) 으로주소사용 포인터와관련된연산자

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 APRE*C/C++ New Features & 업그레이드가이드 ALTIBASE 5.3.3 2010. 05 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

歯9장.PDF

歯9장.PDF 9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'

More information

歯sql_tuning2

歯sql_tuning2 SQL Tuning (2) SQL SQL SQL Tuning ROW(1) ROW(2) ROW(n) update ROW(2) at time 1 & Uncommitted update ROW(2) at time 2 SQLDBA> @ UTLLOCKT WAITING_SESSION TYPE MODE_REQUESTED MODE_HELD LOCK_ID1

More information

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7> 제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information