Chalkboard PowerPoint Presentation

Size: px
Start display at page:

Download "Chalkboard PowerPoint Presentation"

Transcription

1 시스템프로그래밍개요

2 유닉스 History

3 유닉스시스템표준 ANSI C 표준 미국표준협회 (ANSI) 에서표준화한 C 언어명세 : ANSX ISO가이를받아들여 ISO/IEC 9899:1990으로발표함 ( C 언어의문법과라이브러리, 헤더파일을정의하고있다. POSIX 서로다른유닉스시스템사이에서상호이식이가능한응용프로그램을개발하기위한표준으로 IEEE 에서제정 POSIX.1(IEEE Std ) : C 언어응용프로그래밍인터페이스표준 POSIX.2(IEEE Std ) : 표준쉘과유틸리티프로그램인터페이스표준 시스템 V 인터페이스정의 SVID : 프로그램과장치에서이용할수있는시스템호출과 C라이브러리표준포함 POSIX 나 X/OPEN의작업은부분적으로 SVID에기반을두고있다. SVID 표준을준수하면하드웨어에독립적인프로그래밍을할수있다.

4 유닉스시스템표준 X/Open 가이드 X/Open 은유럽의유닉스제조업체를중심으로설립한단체로개방형시스템에대한표준을정의하고보급하고있음 X/Open 이식성가이드 : XPG3, XPG4 XPG 는운영체제의기본인터페이스, 국제화, 터미널인터페이스, 프로세스간통신, C 언어를포함한프로그래밍언어, 데이터관리 (ISAM,SQL) 등에관한지침이정의되어있음 XPG3 에서 POSIX 표준을통합 1996 년오픈소프트웨어재단과합병하여오픈그룹 (The Open Group) 으로새출발함. 오픈그룹이 UNIX 에대한상표권소유호출과 C 라이브러리표준포함 단일유닉스규격 (SUS) 컴퓨터운영체제가유닉스라는이름을사용하기위해지켜야하는표준의총칭이다. 오스틴그룹이관리, IEEE와오픈그룹의작업에기반하여 2002년에 SUSv3 발표 SUSv3에는 C언어의헤더파일규격, 쉘과명령어규격, 시스템호출규격등이포함.

5 유닉스벤더 유닉스벤더별특징및표준지원 특징및표준지원 IBM AIX SVR4 와 4.4BSD, OSF/1 을포함한다. AIX 5L 5.2 에서 SUSv2 를지원했으며, 5.3 부터는 SUSv3 을지원. SUN OS Solaris HP-UX Mac OS X Sco Linux BSD 계열 SVR4 계열 Solaris 8 부터 SUSv2 를지원했으며, Solaris10 부터 SUSv3 를지원. SVR4 + OSF/1 HP-UX 10.0 부터 SVR4 체계를지원했으며, 부터 SUSv3 를지원. BSD + SUSv3 공식적으로 10.5 부터 SUSv3 지원 SVR3 으로부터 SVR4 계승 OpenServer 5 는 POSIX 과 POSIX.2 를지원, UnixWare 부터 SUSv1 을지원 SVID, SVR4, BSD 시스템고르게영향을받음표준체계인 SUS 를적극적으로도입하여최근커널은 SUSv4 까지지원

6 시스템프로그램이란? 리눅스시스템 ( 커널 ) 이제공하는시스템호출 (system call) 을사용해프로그램을작성하는것이다.. 운영체제란? 컴퓨터를작동시키고자원을관리하여사용자의응용프로그램이효율적으로실행될수있는환경을제공하는자원관리프로그램이다. 운영체제가관리해야하는자원은물리적자원과추상적인자원으로나누어진다

7 운영체제의구조

8 시스템콜과라이브러리함수 시스템콜이란? - 커널의자원을사용자가사용할수있도록만들어놓은함수들을말한다. - 시스템콜을호출하면커널모드로전환하여실행된다. 라이브러리함수란? - 사용자들이많이사용하는기능을미리함수로만들어서제공하는것이다. - ( 예 ) 문자열처리, 표준입출력, 수학관련공식 etc - 라이브러리함수는사용자모드에서실행된다.

9 시스템콜과라이브러리함수 응용프로그램 main() { 라이브러리함수 (); 시스템호출 (); } 라이브러리 라이브러리함수 { 시스템호출 (); } 시스템호출 시스템호출코드 사용자영역 커널영역 커널모듈 #n 커널모듈 #n 커널모듈 #n

10 시스템콜과라이브러리함수 (2)

11 시스템호출의오류처리방법 성공하면 0 을리턴, 실패하면 -1 을리턴 전역변수 errno 에오류코드저장 : man 페이지에서코드값확인가능 [ 예제 1-1] 시스템호출오류처리하기 ex1_1.c 01 #include <unistd.h> 02 #include <stdio.h> extern int errno; int main(void) { 07 if (access("unix.txt", F_OK) == -1) { 08 printf("errno=%d\n", errno); 09 } return 0; 12 } # ex1_1.out errno=2 # vi /usr/include/sys/errno.h... /* * Error codes */ #define EPERM 1 /* Not super-user */ #define ENOENT 2 /* No such file or directory */...

12 라이브러리함수의오류처리방법 오류가발생하면 NULL 을리턴, 함수의리턴값이 int 형이면 -1 리턴 errno 변수에오류코드저장 [ 예제 1-2] 라이브러리함수오류처리하기 ex1_2.c 01 #include <stdlib.h> 02 #include <stdio.h> extern int errno; int main(void) { 07 FILE *fp; if ((fp = fopen("unix.txt", "r")) == NULL) { 10 printf("errno=%d\n", errno); 11 exit(1); 12 } 13 fclose(fp); return 0; 16 } # ex1_2.out errno=2 # ex1_2.out errno=2 man fopen에서확인 man fopen에서확인

13 man 페이지활용 man 명령을이용하여메뉴얼페이지를활용할수있다. # man s2 kill <manual section> 1. 일반명령어 2. 리눅스커널시스템호출 3. 표준 C 라이브러리함수 4. 특수파일 (/dev 아래의파일에대한설명 ) 5. 파일의형식이나구성파일 (ex. /etc/passwd) 6. 게임 7. 기타 ( 문자셋, SQL 문, ISO 표준, 정규표현식등등 ) 8. 시스템관리용명령어 9. 커널의여러부분의설명

14 헤더파일 C 는상수정의나시스템및라이브러리호출선언을담은헤더파일이필요하다. C 의경우 /usr/include 와그하위디렉토리에들어있다. 특정디렉토리에서헤더파일을찾아서사용해야한다면컴파일시 I 옵션으로헤더파일위치를지정할수있다. gcc I/usr/openwin/include fred.c 헤더파일을누락시킨채컴파일하는경우에는 Wall 옵션 ( 대부분의경고메시지출력 ) 을더하여 Warning 메시지를보고헤더파일을찾아서추가해준다.

15 gcc 컴파일과정이해

16 gcc 컴파일기본옵션 # gcc -W -Wall -O2 -o test test.c -Wall 모든모호한코딩에대해서경고를보내는옵션 -W 합법적이지만모호한코딩에대해서경고를보내는옵션 -W -Wall 아주사소한모호성에대해서도경고 -O2 최적화레벨을 2로설정 ( 거의대부분의최적화를시도 ) -o test 컴파일된파일명을 test로하라는의미

17 gcc 옵션 # gcc -E test.c 전처리과정의결과를화면에보이는옵션, 전처리과정중에발생한오류를검증할때사용하면좋다. # gcc -S test.c cc1 으로전처리된파일을어셈블리파일로컴파일까지만수행하고멈춘다. test.s 파일이만들어진다. # gcc -c test.c as 에의한어셈블까지만수행하고링크는하지않음. test.o 까지만만든다. # gcc -v test.c 컴파일과정을화면에출력한다. --save-temps 컴파일과정에서생성되는중간파일인전처리파일 (*.i) 과어셈블리파일 (*.s) 를지우지않고현재디렉토리에저장한다. 컴파일과정의에러를분석할때사용.

18 cpp0 옵션 (1) -I 전처리과정에서헤더파일을탐색하는기본디렉토리를추가한다. -include [ 헤더파일경로 ] 헤더파일을소스내에추가할때사용소스파일내에서 #include 하는것과동일 -D[ 매크로 ], -D[ 매크로 ]=[ 매크로값 ] 매크로를외부에서 define # gcc -DDEBUG -o test test.c -U [ 매크로 ] -D 와반대로소스파일내에 #undef 옵션을추가한것과동일 -M make 를위한소스파일의모든종속항목을출력 -MM make 를위한소스파일에서기본 include 디렉토리에있는헤더파일은빼고종속항목을출력전달됨.

19 cpp0( 전처리기 ) 옵션 (2) -nostdinc 디폴트 include 디렉토리 (/usr/include) 에서헤더파일을탐색하지않고 -I 옵션으로추가한디렉토리에서만헤더파일을찾는다. -C -E 옵션과함께사용하며전처리과정에서주석을제거하지않는다. ( 사용빈도낮음 ) -Wp,[ 옵션들 ] cpp0 와 gcc 옵션이같은것으로중복되면 gcc 옵션으로해석된다. gcc 가옵션을해석해서 cpp0, cc1, as, collect2 에게옵션을전달하기때문. gcc 의해석을거치지않고바로 cpp0 의옵션으로전달하고싶을때 -Wp 옵션을사용예 ) -Wp,-DDEBUG,-I/usr/include,-M => cpp0 로 -DDEBUG -I/usr/include -M 옵션이바로전달됨.

20 cc1 C 언어옵션 (1) -ansi ANSI C 표준에부합하는소스를작성하고자할때사용하는옵션 ANSI C 표준 (C89) 으로문법체크를하고 GNU C 의확장문법은사용불가능. 이식성높은코드를작성하고자한다면이옵션을사용. -std=[c 표준들 ] 기타다른표준들을지정하고자할때사용 (i) c89 또는 iso9899:1990 => -ansi 옵션과동일 (ii) c99 또는 iso9899:1999 => 1999년에새로제정된 ANSI C 표준, gcc 3.x 버전부터사용가능 (iii) gnu89 => GNU C89 표준으로문법체크, C99와유사하나완전동일하지는않다. (iv) gnu99 => GNU C99 표준으로문법체크 -traditional 오래된 Traditional C (K&R C) 문법으로체크, gcc 3.x 버전부터는지원하지않는다.

21 cc1 C 언어옵션 (2) - fno asm gnu89 문법에서지원하는 asm, inline, typeof 키워드를사용하지않는다. gcc 는기본적으로 gnu89 문법으로체크한다. < 참고 > asm 은 C 소스내에어셈블리코드를삽입할때, inline 은인라인함수지정할때, typeof 는변수타입을알아볼때사용. asm, inline, typeof 키워드는 ANSI C89 표준에서는지원하지않으므로 ANSI C89 에서지원하는 asm, inline, typeof 를사용해야한다.

22 cc1 경고옵션 -W -Wall 아주사소한경고까지표시 -Wno-[ 제거할경고 ] 경고메시지제거 ex: -Wunused, -Wunused-function, -Wunused-label, -Wunusedparameter, -Wunused-value, -Wunused-variable, -Wwrite-strings,... -w 모든경고메시지를제거 -Werror -pedantic 모든경고를컴파일을중단하는에러로취급해서경고하나만나와도컴파일중단. ANSI C89 표준에서요구하는모든경고메시지를표시 -pedantic-errors ANSI C89 표준에서요구하는모든에러메시지를표시 -Wtraditional 소스가 ANSI C 와 K&R C 간에서로다른결과를가져올수있는부분이있다면경고표시

23 cc1 최적화옵션 -O0 최적화를수행하지않음. -O1 -O2 가장많이사용하는옵션, 거의대부분의최적화를수행. -O3 가장높은레벨의최적화. 모든함수를인라인함수로취급해버림. 너무많은소스변경이생기므로왜곡발생. -Os 사이즈최적화를수행. 임베디드시스템에서자주사용.

24 cc1 디버깅옵션 -g gdb 에게제공하는정보를바이너리에삽입한다. 기본적으로 -g2 와동일. -g0 디버깅정보를삽입하지않음 -g3 디버깅정보를가장많이제공 -pg 프로파일을위한코드를삽입함. 프로그램이종료하면프로파일정보가 *.out 파일에저장됨. gprof 에의해 out 파일을분석

25 as 옵션 gcc 는 as 옵션을알지못한다. as 에게옵션을지정하기위해서는 - Wa,[as 옵션들 ] 형식으로 gcc 를거치지않고바로전달해야한다. -al 어셈블된인스트럭션을보인다. -as 정의된심볼을보인다. -l[ 패스 ] include 디렉토리를지정한다. 어셈블리소스내에서 사용된.include 지정자가지정하는헤더파일을찾을때사용. -W 또는 --no-warn 경고를출력하지않는다.

26 collect2 또는 ld 링크옵션 (1) -L[ 라이브러리디렉토리 ] 라이브러리를찾을디렉토리를지정. -l[ 라이브러리이름 ] 같이링크할라이브러리를지정라이브러리이름앞의 lib 을떼고확장자이전까지를라이브러리이름으로취급. (libtest.so => -ltest) 반드시컴파일명령에서소스파일의뒤에와야한다. 예 ) gcc -o test test.c -L/opt/lib -ltest < 참고 > main 보다앞에링크하면 undefined 참조오류발생. 그리고라이브러리내에 main 함수가있다면실행파일의 main 함수가실행되지않고라이브러리내의 main 이실행되버릴수있다. -shared -static 공유라이브러리와정적라이브러리가같이있을경우공유라이브러리를우선하여링크 ( 아무옵션을주지않아도공유라이브러리링크가우선함 ) 정적라이브러리를우선하여링크 -nostdlib 링크시에표준 C 라이브러리를사용하지않음.

27 collect2 또는 ld 링크옵션 (1) -nostartfiles crt1.o 등과같은 start up 파일을링크하지않는다. OS, 부트로더등을컴파일할때사용한다. -Wl,[ 링크옵션들 ] gcc 를거치지않고바로링크에게옵션을정해주고자할때사용한다. -s 실행파일에서심볼테이블제거 -x 출력파일에로컬심볼제거 -n 텍스트영역을읽기전용을만듦 -r 추후링크가가능하게오브젝트를만듦 -e [name] 시작심볼을 name 심볼로사용 ( 기본적으로 _start 심볼이시작심볼이다.) -M 심볼들의정보를자세히출력 -oformat [format] 주어진형식의오브젝트파일을생성

28 정적라이브러리와공유라이브러리 라이브러리개요. - 라이브러리는재사용을염두에두고작성한함수들을미리컴파일한결과를모아둔것이다. - 기본적으로제공되는표준라이브러리는 /usr/lib 에존재한다. -.a 와.so 확장자를가진다. - gcc 컴파일시에 -L 또는 l 옵션을사용하여다른디렉토리에있는라이브러리를이용할수있다. /usr/lib/libm.a 를표준 C 라이브러리와같이사용할수있도록컴파일. # gcc o fred fred.c lm # gcc o x11fred L/usr/openwin/lib x11fred.c lx11

29 정적라이브러리 (1) 정적라이브러리 (static library) - 미리만들어놓은오브젝트코드를 ar 도구를이용하여아카이브해놓은것이다. 정적라이브러리생성하기 $ mytest.c 를만든다. $ gcc c mystatic.c 로 mystatic.o 를생성한다. $ ar rv libmystatic.a mystatic.o

30 정적라이브러리 (2) 정적라이브러리호출하기 $ mymain.c 를만든다.

31 정적라이브러리 (3) 컴파일한다. $ gcc mymain.c o mymain lmystatic L -lmystatic 은 libmystatic.a -L libmystatic.a 가현재같은디렉토리에있음.

32 공유라이브러리 (1) 실행시사용가능한공유코드를참조하는방식으로링크된다. 공유라이브러리를로드하고참조함수를확인하는프로그램을동적로더 (ld.so) 라고한다. 이로더는 /etc/ld.so.cinf 에설정된경로를이용하여공유라이브러리를검색한다. 이구성파일에경로를추가한후 ldconfig 명령을실행하면캐쉬를업데이트한다.

33 공유라이브러리 (2) 공유라이브러리생성하기 myshared.c 를만든다. 컴파일한다. $ gcc c fpic myshared.c $ gcc shared o libmyshared.so myshred.o

34 공유라이브러리 (3) 공유라이브러리호출하기

35 공유라이브러리 (4) 해결방법 1 /etc/ld.so.conf 파일에경로를설정한후 ldconfig 로캐쉬를업데이트한다. 해결방법 2 LD_LIBRARY_PATH 환경변수에공유라이브러리가저장된경로를설정한다.

36 오류처리 일반적으로오류시반환값 - 시스템콜오류시 -1 반환, 전역변수 errno 에에러코드를설정한다. - 라이브러리함수오류시 NULL 반환 perror() 함수를이용한오류메시지출력 strerror() 함수를이용한오류메시지출력 errno 변수 - #include <errno.h> 를포함해야한다.

37 perror(3), strerror(3) #include <stdio.h> void perror(const char *s); perror( open ); 출력 : open: No such file or directory #include <string.h> char *strerror(int errnum); fprintf(stderr, %s,strerror(errno));

38 에러감지및종료 - exit 프로세스를종료하는가장일반적인방법은 exit() 함수를호출하는방식이다. #include <stdlib.h> void exit(int status); ANSI C 헤더에정의되어있는 status 상수 EXIT_SUCCESS 0 EXIT_FAILURE!= 0

39 동적인메모리할당 #include <stdlib.h> void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); void free(void *ptr); malloc 는지정된바이트수 size 만큼힙메모리에할당한다. calloc 는 nmemb 의 size 만큼배열을힙메모리에할당한다. realloc 는할당받은메모리크기를변경한다. - 새로지정한메모리양으로메모리를할당받고, 이전메모리의내용을복사한후, 이전할당받은메모리를반환한다. 그릭새로할당받은메모리를반환한다 free 는할당받은메모리를반환한다. 39

40 메모리할당예제 (1) #include <time.h> #include <sys/time.h> #include <string.h> #include <stdio.h> #include <stdlib.h> int main() { struct timeval *tvp; char *date; tvp = (struct timeval *)malloc(sizeof(struct timeval)); if (tvp == NULL) { fprintf(stderr, "Out of virtual memory.\n"); exit(1); } 40

41 메모리할당예제 (2) if (gettimeofday(tvp, NULL) == -1) { perror("gettimeofday failed"); exit(1); } date = strdup(ctime(&tvp->tv_sec)); if (date == NULL) { fprintf(stderr, "Out of virtual memory.\n"); exit(1); } printf("%s", date); free(tvp); free(date); return 0; } 41

42 메모리조작함수 #include <string.h> void *memcpy(void *dest, const void *src, size_t n); void *memmove(void *dest, const void *src, size_t n); void *memccpy(void *dest, const void *src, int c,size_t n); void *memchr(void *s, int c, size_t n); int memcmp(void *s1, const void *s2, size_t n); void *memset(void *s, int c, size_t n); memcpy는 src를 dest에 n바이트만큼복사. memcpy는 src를 dest에 n바이트만큼이동 memcpy는 src를 dest에 n바이트만큼복사하다 c가발견되면중지하고리턴 memchr는 s에서 n 바이트내에 c가있으면반환 memcmp s1과 s2를 n바이트만큼비교 memset는 s의 n바이트를 c로세팅 42

43 메모리조작함수예제 (1) #include <unistd.h> #include <string.h> struct mydata { int age; int weight; char name[16]; char juso[80]; }; int main() { struct mydata data; struct mydata *mdata; char f_data[120]; int my_weight; 43

44 메모리조작함수예제 (2) data.age = 29; data.weight = 64; strcpy(data.name, "yundream"); strcpy(data.juso, "seoul korea"); memset(f_data, 0x00, 120); } // data 구조체를 f_data 로메모리복사한다. memcpy(f_data, (void *)&data, sizeof(struct mydata)); mdata = (void *)&f_data; printf("pcopy %d\n", mdata->age); memcpy((void *)&my_weight, f_data+4, sizeof(int)); printf("%d\n", my_weight); 44

45 문자열복사함수 #include <string.h> char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n); strcpy() 는 src 가가르키는문자열을 dest 가가르키는배열에복사한뒤 dest 의포인터를반환한다. src 에서복사될때 '\0' 까지복사됨으로문자열이겹쳐지지는않는다. 이때 dest 는 src 를모두복사받을수있을정도로충분히커야한다. strncpy() 는 n 을이용해서복사할문자열의크기를정할수있으므로버퍼오버플로우에좀더안전하다. 만약 src 의길이가 n 보다작다면 dest 의남는공간은 null 로채워진다. 45

46 문자열추가함수 #include <string.h> char *strcat(char *dest, const char *src); char *strncat(char *dest, const char *src,size_t n); strcat() 함수는 src 문자열을 dest 로 append 시킨다. 이때마지막에 '\0' 을추가시킨뒤 dest 에대한포인터를반환한다. 문자열을중첩되지않으며 dest 는문자열을저장하기위한충분한공간을가지고있어야한다. 이함수를이용할경우 dest 의공간을초과해서문자열이복사될수도있으며이는여러가지문제를발생시킨다. strncat 은 src 의 n 바이트만큼만 dest 에추가한뒤 dest 의포인터를반환한다. 46

47 문자열비교함수 #include <string.h> int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n); 두문자열 s1 과 s2 를비교한다. 만약 s1 가 s2 보다작다면음수를같다면 0 을, 크다면양수를리턴한다. 두문자열 s1 과 s2 를비교한다. 이때처음 n 개만큼의문자만비교한다. strcmp(3) 와비슷한데, strcmp 는문자열전체를비교한다는점이 strncmp() 와다르다. 47

48 문자열추출함수 #include <string.h> char *strtok(char *s, const char *delim); char *strtok_r(char *s, const char *delim, char **ptrptr); token 은 delim 에있는문자를포함하지않은하나이상의문자로된문자열을의미한다. strtok() 함수는주어진문자열 s 를 delim 을기준으로토큰을뽑아낸다. strtok) 는다음토큰을가리키는포인터를리턴한다. 만약더이상가져올수있는토큰이없다면 NULL 을리턴하게된다. 토큰이구분자로끝나면, 이구분자가 \0 로겹쳐쓰여지고, 이에대한포인터가다음 strtok() 의호출을위해서저장된다. strtok_r() 함수는 strtok() 와동일하게작동한다. 그러나정적버퍼를사용하지않고 char * 포인터로할당된유저포인터를사용한다. 48

49 문자열조작함수 #include <string.h> char *strdup(const char *s); size_t strlen(const char *s); strdup() 함수는문자 s 를복사하고복사된문자열을가리키는포인터를반환한다. 문자를복사할공간을확보하기위해서내부적으로 malloc(3) 이호출된다. 그러므로 strdup() 함수를호출해서문자열복사를했다면 free(3) 등을통해서공간이필요없게되었을때커널에되돌려주어야한다. 에러발생시 NULL 을반환한다. strlen 은 '\0' 을만나기전까지의문자열 s 의길이를계산하여반환한다. 49

50 문자열검색함수 #include <string.h> char *strchr(const char *s, int c); char *strrchr(const char *s, int c); char *strstr(const char *haystack, const char *needle); strchr 은문자열 s 에서 c 를찾은위치포인터를반환한다. strrchr 은문자열 s 를뒤에서서부터앞쪽으로검색하여 c 를찾은위치포인터를반환한다. strstr 함수는문자열 haystack 에서 needle 이처음발견되는곳위치포인터를반환한다. 찾지못하면 NULL 을반환한다. 50

51 문자열변환함수 #include <stdlib.h> double strtod(const char *str, char **endptr); float strtof(const char *str, char **endptr); long double strtold(const char *str, char **endptr); long strtol(const char *str, char **endptr, int base); long long strtoll(const char *str, char **endptr, int base); long atol(const char *str); long long atoll(const char *str); int atoi(const char *str); strtod, strtof, strtold 함수는인자로받은문자열 nptr 을해석할수있는곳까지해석해서 double, float, long double 형으로표현한값을리턴한다. int i=atoi( 1234 ); 51

52 디버깅 문제점을수정하기위한디버깅과정이반드시필요하다. 사용가능한디버깅툴들

53 gdb(1) GNU 에서제공하는공개용디버거이다. 이도구를이용하려면컴파일시 g 옵션과함께컴파일되어야한다. 이용방법 $ gdb 실행파일명 or $ gdb P 실행중인 PID

54 gdb(2) - 명령어들

55 gdb(3) - 명령어들

56 gdb 사용법 (1) << 실행 >> 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

57 gdb 사용법 (2) << 소스보기 >> 옵션에따라실행중인프로그램의소스를다양한방법으로볼수있다. l(list) list 10 list [ 함수명 ] list - // 이전 10 라인을출력한다. list [ 파일명 ]:[ 함수명 ] list [ 파일명 ]:10 list 명령어를사용하면소스코드가 10 줄단위로출력된다. 다음의명령을통해출력단위를변경할수있다. set listsize 20

58 gdb 사용법 (3) << 세그멘테이션폴트가발생했을대 >> 컴파일한프로그램을실행했을때 segmentation fault 가발생하여비정상종료되었다면다음의명령어를통해오류지점을확인할수있다. (gdb) r(run) run 명령어는 GDB 가프로그램을실행시켜이상이발생했을때의파일과지점을출력해준다. 또한관련함수또는변수에담긴값을출력하여오류수정에많은도움을준다. 오류지점에도달하기전과정을확인하기위해서는다음명령어를이용하면된다. (gdb) bt bt 명령어는백트레이스로프로그램스택을역으로탐색한다.

59 gdb 사용법 (4) << 브레이크포인트 >> 브레이크포인트는다음의방법들을통해설정가능하다. (GDB) b(break) [ 함수명 ] (GDB) break 10 (GDB) break [ 파일명 ]:[ 함수명 ] (GDB) break [ 파일명 ]:10 (GDB) break +2 // 현재행에서 2 개행이후브레이크포인트설정 (GDB) break -2 // 현재행에서 2 개행이전브레이크포인트설정 (GDB) break *0x // 메모리주소에설정 ( 어셈블리로디버깅시이용 ) (GDB) break 10 if var == 0 //var 변수의값이 0 일때 10 번행에설정 브레이크포인트의발동조건은다양하게변경가능하다. (GDB) condition [N] var == 0 //var 변수가 0 일때 N 번브레이크포인트동작 (GDB) condition [N] func(i) > 5 현재설정된브레이크포인트의목록은다음의명령으로확인가능하다. (GDB) info break

60 gdb 사용법 (5) 브레이크포인트는 GDB 가종료될때까지유효하다. 따라서필요없을때는다음의방법들을통해설정을지운다. (GDB) cl(clear) [ 함수명 ] (GDB) clear 10 (GDB) clear [ 파일명 ]:[ 함수명 ] (GDB) clear [ 파일명 ]:10 (GDB) d // 모든브레이크포인트지움 (GDB) disable br // 모든브레이크포인트비활성화 (GDB) disable br 1 3 //1 번, 3 번브레이크포인트비활성화 (GDB) ensable br // 모든브레이크포인트활성화 (GDB) ensable br 1 3 //1 번, 3 번브레이크포인트활성화

61 gdb 사용법 (6) << 프로그램실행 >> 프로그램의실행은 run 명령어를이용한다. 만일이미실행중일때는재실행한다. (gdb) r(run) 프로그램실행시인자를지정하기위해서는다음과같이이용한다. (gdb) run arg1 arg2 실행중인프로그램을종료할때는 kill 명령어를이용한다. (gdb) k(kill) 현재실행중인행의수행을멈추기위해서는 step 명령어를이용한다. step 명령어는한행씩동작하도록한다. next 명령어와는함수호출시다른결과를보인다. (gdb) s(step) (gdb) step 6 //step 을 6 번수행

62 gdb 사용법 (7) << 프로그램실행 >> 현재행의실행이멈춘상태에서다음행을실행하기위해서는 (gdb) n(next) (gdb) next 6 //next 를 6 번수행 만일 step 명령을이용중루프에빠져나오지못할경우에는 until 명령어를이용한다. (gdb) u(until) 한행씩이아닌다시연달아서실행하기위해서는 (gdb) c(continue) 함수가매우길어끝나는지점으로이동하기위해서는 finish 명령어를사용한다. (gdb) finish

63 gdb 사용법 (8) << 프로그램실행 >> 함수의남은부분을수행하지않고빠져나오기위해서는 return 명령어를사용한다. (gdb) return return 명령어를사용시 return 값을임의로지정하기위해서는다음과같이이용한다. (gdb) return 1234 << 와치포인트설정 >> 와치포인트는변수값의변화와코드의변화를확인할때편리하게이용가능하다. (gdb) watch [ 변수명 ] // 변수에값이써질때브레이크 (gdb) rwatch [ 변수명 ] // 변수의값이읽혀질때브레이크 (gdb) awatch [ 변수명 ] // 변수에읽기, 쓰기경우에브레이크

64 gdb 사용법 (9) << 변수와레지스터값검사 >> 현재위치한행에서접근가능한지역변수들목록확인 (gdb) info locals 현재위치한행에서접근가능한전역변수들목록확인 (gdb) info variables 확인하고싶은변수의값을출력하기위해서는 print 명령어를사용한다. (gdb) p(print) [ 변수명 ] // 변수의값 (gdb) print [ 함수명 ] // 함수의주소값 포인터변수의경우위의방법으로하면주소값만이출력된다. 포인터변수의값또는포인터구조체등의값을보기위해서는 * 를붙여준다. (gdb) print *[ 변수명 ] 이중포인터라면 ** 를붙여준다.

65 gdb 사용법 (10) << 변수와레지스터값검사 >> GDB 는변수뿐만아니라레지스터의값도확인할수있다. (gdb) print $[ 레지스터명 ] print 명령어는지역변수를우선하여보여주기때문에지역변수와전역변수에서동일한이름을사용할때전역변수를확인하기위해서는 :: 을이용한다. (gdb) print 'main.c'::[ 변수명 ] 파일명은 ' 따옴표 ' 으로감싸야한다. 특정함수에있는변수를확인하기위해서는 (gdb) print [ 함수명 ]::[ 변수명 ]

66 gdb 사용법 (11) << 변수와레지스터값검사 >> print 명령어로변수또는레지스터를확인할때는기본적으로 10 진수로출력한다. 이를다른형식으로보고싶을때는다음과같은방법을이용한다. (gdb) print/t [ 변수명 ] (gdb) print/o [ 변수명 ] (gdb) print/d [ 변수명 ] (gdb) print/u [ 변수명 ] (gdb) print/x [ 변수명 ] (gdb) print/c [ 변수명 ] (gdb) print/f [ 변수명 ] (gdb) print/a [ 변수명 ] //2진수로 //8진수로 //10진수로 (int) // 부호없는 10진수로 (unsigned int) //16진수로 // 최초 1바이트값을문자형으로 // 부동소수점값 // 가장가까운심볼의오프셋 print 명령어는값을보여줄뿐아니라값을설정하는것도가능하다. (gdb) print [ 변수명 ] = [ 값 ]

67 gdb 사용법 (12) << 화면에변수의값을자동으로디스플레이하기 >> display 명령어를이용하면매단계가진행될때마다자동으로변수의값을출력해준다. (gdb) display [ 변수명 ] display 변수를해제하기위해서는 undisplay 명령어를이용한다. (gdb) undisplay [N] display 역시 x,c,o 등등을이용해다양한형태로출력가능하다. GDB 사용법출처 : 참고도서 : 유닉스리눅스프로그래밍필수유틸리티

68 strace 시스템콜을추적할수있다. $ strace./test1 3>&1 more

69 ltrace 시스템콜을추적할수있다. $ ltrace./test1

<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

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PA for SWE2007

PA for SWE2007 Programming Assignment #0: Making own "my_string.h" SWE2007: Software Experiment II (Fall 2016) Due: 21st Sep. (Wed), 11:59 PM 1. Introduction 이번과제에선, 앞으로있을다른과제들을수행하기위한필요할함수들을구현한다. 그대상은, 문자열조작 / 검사 / 변환함수들을담은

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 유닉스시스템프로그래밍개요 IT CookBook, 유닉스시스템프로그래밍 학습목표 유닉스시스템관련표준을이해한다. 유닉스시스템프로그래밍이무엇인지이해한다. 시스템호출과라이브러리함수의차이를이해한다. 유닉스시스템의기본명령을사용할수있다. C 컴파일러와 make 도구를사용할수있다. 2/27 목차 유닉스시스템의역사 유닉스시스템표준 유닉스시스템프로그래밍이란 시스템호출과라이브러리함수의비교

More information

11장 포인터

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

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

PA0 for SSE2033

PA0 for SSE2033 SSE2033: System Software Experiment II (Spring 2016) Programming Assignment #0: Making own "my_string.h" Due: 21st Mar. (Mon), 11:59 PM 1. Introduction 이번과제에선, 앞으로있을다른과제들을수행하기위한필요할함수들을구현한다. 그대상은, 문자열조작

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

PA for SWE2007

PA for SWE2007 SWE2007: Software Experiment II (Fall 2014) Programming Assignment #0: Making own "string_sw.h" Due: 22nd Sep. (Mon), 11:59 PM 1. Introduction 이번과제에선, 앞으로있을다른과제들을수행하기위한필요할함수들을구현한다. 그대상은, 문자열조작 / 검사 / 변환함수들을담은

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Development Environment 2 Jo, Heeseung make make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2

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

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

Microsoft PowerPoint - 제9강 문자열

Microsoft PowerPoint - 제9강 문자열 제11장 문자열 문자열정의 문자열과포인터, 문자열과배열 2 차원문자열배열, 2 차원문자열포인터 문자열함수, 헤더파일 string.h ctype.h strlen(), strcat(), strcpy(), strstr(), strchr(), strcmp(), strtok() getc(), putc(), fgetc(), fputc(), gets(), puts(),

More information

Computer Programming (2008 Fall)

Computer Programming  (2008 Fall) Computer Programming Practice (2011 Winter) Practice 12 Standard C Libraries The Last Practice 2012. 01. 25 2/24 Contents Standard C Libraries Input & Output Functions : stdio.h String Functions : string.h

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

untitled

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

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

vi 사용법

vi 사용법 유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();

More information

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE> 쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것

More information

OCW_C언어 기초

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

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

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

<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

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

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

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

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

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

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

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

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings C Programming 문자와문자열 (Characters and Strings) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 문자처리 문자열처리 2 문자처리 문자처리 문자분류함수 문자변환함수 문자열처리 3 문자분류함수 (1/3) 문자분류 (Character classification) 함수 : 영문대소문자 영문대소문자로분류되는문자인지여부를확인하는함수

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

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

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

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

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

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

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

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

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

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

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지

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

untitled

untitled 1 hamks@dongguk.ac.kr (goal) (abstraction), (modularity), (interface) (efficient) (robust) C Unix C Unix (operating system) (network) (compiler) (machine architecture) 1 2 3 4 5 6 7 8 9 10 ANSI C Systems

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

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

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드] Chapter 15 문자열 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 문자의집합체 문자열의정의 일련의문자 C 언어에서문자열앞뒤에인용부호 를이용 문자와문자열과의차이 문자열의저장 (1) 배열을이용하는방법 문자열상수 c c language 를저장하는문자열배열 항상문자열마지막에는 NULL문자를넣어야함 (2)

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

11장 포인터

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

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

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

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

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드]

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드] System Programming Lab Week 1: Basic Skills for Practice Contents vi Editor 사용법 GCC 컴파일러사용법 Makefile 사용법 GDB 사용법 VI Editor Usage vi 모드 입력모드 : 실제문서를편집하는모드. 명령모드 : 키입력이바로명령이되는모드로서쓴내용을삭제하거나, 복사할때사용. ex 명령모드

More information

YRRZBRRLMCEQ.hwp

YRRZBRRLMCEQ.hwp C언어2 4차시강의자료 이대종( 한경대학교) 1 차시. 자료형( 데이터유형) 1.1 문자형데이터형식 ( char 형 ) 1.2 소수점이없는정수형 ( int 형 ) 1.3 소수점이있는실수형 (float 형, double 형 ) 2 차시. 연산자 2.1 2.2 2.3 2.4 산술연산자 증감연산자 관계연산자 논리연산자 3 차시. 제어문 ( 조건문, 반복문) 3.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

<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

컴파일러

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

More information

02장.배열과 클래스

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

More information

C 프로그램의 기본

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

More information

13 주차문자열의표현과입출력

13 주차문자열의표현과입출력 13 주차문자열의표현과입출력 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 C 언어를이용하여문자열을처리하기위해서는문자형의배열이나포인터를사용하게된다. 문자열을처리하는동작으로는단순하게문자열의입력이나출력기능이외에도문자열의복사나치환, 문자열의길이를구하거나문자열을비교하는기능등많은기능을필요로한다. 그러나이러한기능들을모두구현하기란매우까다로우며,

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

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - chap-02.pptx 쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 컴퓨터프로그래밍기초 프로그램작성과정 에디터 (editer) 컴파일러 (compiler) 링커 (linker) 로더 (loader) 소스파일 test.c 오브젝트파일 test.obj 실행파일 test.exe 통합개발환경 (IDE) 컴퓨터프로그래밍기초 2 프로그램작성단계 편집 (edit) 에디터를이용하여원하는작업의내용을기술하여소스코드작성

More information

슬라이드 1

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

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

Microsoft PowerPoint - chap06-4 [호환 모드]

Microsoft PowerPoint - chap06-4 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-4 참고자료 문자열의처리 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 문자열의연산 문자열은배열의형태로구현된응용자료형이므로연산을자유롭게할수없다. 배열에저장된문자열의길이를계산하는작업도간단하지않다.

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

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

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

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

PowerPoint Template

PowerPoint Template 18 동적할당과고급처리 인터넷정보과 1 2/19 동적할당 목적 다음과같은일반변수의선언과사용은변수를정적 (static) 으로사용 int a = 10; 메모리사용예측이부정확한경우는충분한메모리를미리확보해야하는것은비효율 동적 (dynamic) 메모리할당 (Memory Allocation) 동적인메모리할당을위해서는함수 malloc() 을이용, 메모리공간을확보 함수 malloc()

More information

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 binoopang@is119.jnu.ac.kr Abstract libc에서제공하는 API를후킹해본다. 물론이방법을사용하면다른라이브러리에서제공하는 API들도후킹할수있다. 여기서제시하는방법은리눅스후킹에서가장기본적인방법이될것이기때문에후킹의워밍업이라고생각하고읽어보자 :D Content 1.

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

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

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

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

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

PowerPoint 프레젠테이션

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

More information

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - Chapter_04.pptx 프로그래밍 1 1 Chapter 4. Constant and Basic Data Types April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 기본자료형문자표현방식과문자자료형상수자료형변환 기본자료형 (1/8) 3 변수 (Variables)

More information

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

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

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

C# Programming Guide - Types

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

PowerPoint 프레젠테이션

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

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device

More information

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

Microsoft PowerPoint - chap11.ppt [호환 모드] 2010-1 학기프로그래밍입문 (1) 11 장입출력과운영체제 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr k 0 특징 printf() - 임의의개수의인자출력 - 간단한변환명세나형식을사용한출력제어 A Book on C, 4ed. 11-1 printf() printf(control_string, other_argument) -

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

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

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

개발도구

개발도구 리눅스개발도구 II - 디버깅 - 1 Contents C 프로그래밍오류의사례 gdb 디버거 메모리디버깅 기타디버깅 시스템콜, 라이브러리호출디버깅 매크로, assert() 2 System Security Lab@Myongji Univ. 프로그래밍오류 (error) 오류의유형 구문오류 (syntax error) 의미오류 (semantic error) 정적의미오류

More information

Data Structure

Data Structure Function & Pointer C- 언어의활용을위한주요기법 (3) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr 함수의인자전달 함수의인자전달 함수의인자전달방식 인자전달의기본방식은복사다. 함수호출시전달되는값을매개변수를통해서전달받는데, 이때에값의복사가일어난다. int main(void) int val = 10;

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

11장 포인터

11장 포인터 쉽게풀어쓴 C 언어 Express 제 12 장문자와문자열 이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것이다. 문자의중요성 인간한테텍스트는대단히중요하다.

More information

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - Chapter 1-rev 1.C 기반의 C++ part 1 스트림입출력 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 스트림입출력 Jong Hyuk Park printf 와 scanf 출력의기본형태 : 과거스타일! iostream.h 헤더파일의포함

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

문서의 제목 나눔명조R, 40pt

문서의 제목  나눔명조R, 40pt 이문서는나눔글꼴로작성되었습니다. 설치하기 11차시 : 함수동적메모리할당다차원배열 프로그래밍및실험 제 11주 동국대학교조영석 6.6 함수인자로써의배열 - 함수정의에서배열로선언된형식매개변수는 pointer임. - 함수의인자로배열이전달되면배열의기본주소가 ( 배열의내용이아님 ) call-by-value로전달됨. - 배열원소는복사되지않음. 2 ( 예 ) #include

More information

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(Intro).ppt 컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버

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

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1. 표준입출력 표준입출력 입력 : 키보드, scanf 함수 출력 : 모니터, printf 함수문제 : 정수값 2개를입력받고두값사이의값들을더하여출력하라. #include int main(void) int Num1, Num2; int

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터

More information