Presentation is loading. Please wait.

Presentation is loading. Please wait.

C 프로그래밍 소개 숙명여대 창병모 2011 가을.

Similar presentations


Presentation on theme: "C 프로그래밍 소개 숙명여대 창병모 2011 가을."— Presentation transcript:

1 C 프로그래밍 소개 숙명여대 창병모 2011 가을

2 목표 C 표준 라이브러리의 깊이 있는 이해 시스템 호출과 C 표준 라이브러리 관계 C 프로그래밍 환경 © 숙대 창병모

3 C 입출력 라이브러리 함수 © 숙대 창병모

4 시스템 호출과 라이브러리 함수 시스템 호출(System Calls) C 라이브러리 함수(Library Functions)
Unix 커널에 서비스 요청하는 호출 C 함수처럼 호출될 수 있음. C 라이브러리 함수(Library Functions) C 라이브러리 함수는 보통 시스템 호출을 포장해 놓은 함수 보통 내부에서 시스템 호출을 함 © 숙대 창병모

5 시스템 호출과 라이브러리 함수 application code user process C library functions
system calls kernel kernel hardware (harddisk…)

6 C 표준 I/O 라이브러리 1975년에 Dennis Ritchie에 의해 작성 ANSI C Standard Library
많은 OS 상에 구현됨 ANSI C Standard Library 버퍼 할당(Buffer allocation) 최적 크기 단위로 I/O를 수행 디스크 I/O 횟수 최소화 스트림(Stream) 열린 파일을 스트림이라고 한다. 문자의 흐름으로 파일 입출력을 다룬다 © 숙대 창병모

7 파일 C의 파일은 모든 데이터를 연속된 바이트 형태로 저장한다.

8 C 언어의 파일 종류 텍스트 파일(text file) 이진 파일(binary file)
사람들이 읽을 수 있는 문자들을 저장하고 있는 파일 텍스트 파일에서 “한 줄의 끝”을 나타내는 표현은 파일이 읽어 들 여질 때, C 내부의 방식으로 변환된다. 이진 파일(binary file) 모든 데이터는 있는 그대로 바이트의 연속으로 저장 이진 파일을 이용하여 메모리에 저장된 변수 값 형태 그대로 파일 에 저장할 수 있다.

9 파일 열기 파일을 사용하기 위해서는 반드시 먼저 파일 열기(fopen)를 해야 한다.
fopen 하면 FILE 구조체에 대한 포인터가 리턴된다. FILE 포인터는 열린 파일을 지정한다.

10 파일 열기 파일 입출력 과정 파일 열기 fopen() 파일 열기, 읽기/쓰기, 파일 닫기
#include <stdio.h>    FILE    *fp;  fp=fopen("파일 이름", "입출력방식");

11 fopen 모드 모드 내 용 "r" "w" "a" "r+" "w+" "a+" "rb" "wb" "ab" "rb+" "wb+"
읽기 전용으로 연다 "w" 쓰기 전용으로 연다.  파일이 없으면 새로 생성하고 이미 존재하면 그 파일 내용을 삭제   "a" 추가용으로 연다. 파일이 없으면 새로 생성한다. "r+" 이미 존재하는 파일을 읽기쓰기(갱신)용으로 연다. "w+" 파일을 생성하고 갱신용으로 연다. "a+" 파일을 추가용, 갱신용으로 연다. 파일이 없으면 새로 생성한다. "rb" 이진 파일을 읽기용으로 연다. "wb" 이진 파일을 쓰기용으로 연다. "ab" 이진파일을 추가용으로 연다. 파일이 없으면 새로 생성한다. "rb+" 이미 존재하는 이진파일을 갱신용으로 연다. "wb+" 이진파일을 생성하고 갱신용으로 연다. "ab+" 이진 파일을 추가용, 갱신용으로 연다. 파일이 없으면 새로 생성한다.

12 FILE 구조체 파일 관련 시스템 호출 함수 표준 입출력 함수 FILE 구조체 파일 식별자(file descriptor)
열린 파일을 나타내는 번호 표준 입출력 함수 FILE 구조체에 대한 포인터 열린 파일을 나타낸다. FILE 구조체 열린 파일에 대한 정보를 포함하는 구조체 파일 디스크립터 (file descriptor) 버퍼에 대한 포인터, 버퍼 크기 … 에러 플래그 등 #include <stdio.h>

13 FILE 구조체 열린 파일에 대한 정보를 저장하기 위한 구조체 <stdio.h>에 정의되어 있음
typedef struct { int _cnt; // 버퍼에 남아 있는 문자의 수 unsigned char *_ptr; // 버퍼 내에 다음 쓸(읽을) 위치 포인터 unsigned char *_base; // 버퍼 시작 주소 unsigned char _flag; // 스트림의 현재 상태 _IOFBF, _IOLBF, _IONBUF _IOEOF, _IOERR _IOREAD, _IOWRT unsigned char _file; // 파일 식별자 } FILE ; © 숙대 창병모

14 표준 입력/출력/에러 표준 I/O 스트림 (stream) stdin 표준 입력에 대한 FILE 포인터 키보드 stdout
프로그램이 시작되면 자동으로 open되는 스트림 stdin, stdout, stderr FILE* #include <stdio.h> 표준 입출력 포인터 설명 가리키는 장치 stdin 표준 입력에 대한 FILE 포인터 키보드 stdout 표준 출력에 대한 FILE 포인터 모니터 stderr 표준 오류에 대한 FILE 포인터

15 표준/파일 입출력 함수 표준 입출력함수 표준 파일 입출력 함수 기능 문자단위로 입력하는 함수 문자단위로 출력하는 함수
getchar() fgetc(), getc() 문자단위로 입력하는 함수 putchar() fputc(), putc() 문자단위로 출력하는 함수 gets() fgets() 문자열을 입력하는 함수 puts() fputs() 문자열을 출력하는 함수 scanf() fscanf() 자료형에 따라 자료를 입력하는 함수 printf() fprintf() 자료형에 따라 자료를 출력하는 함수

16 표준 입출력: 예

17 파일 출력: 예 // 키보드에서 문자를 입력 받아 파일에 출력하는 예제 #include <stdio.h> #include <conio.h> void main(int argc, char *argv[]) { FILE *fp; int c; fp = fopen(argv[1],"w"); //쓰기 전용으로 열기 c = getchar(); //입력받은 문자의 ASCII 코드 반환 while(c!=EOF) { // file의 끝이 아니면. fputc(c, fp); // fp가 가르키는 파일에 문자 c저장 c = getchar(); // 문자를 읽어 c에 저장 } fclose(fp); } © 숙대 창병모

18 명령줄 인수 argv[] $copy afile bfile c o p y \0 argv[0] argv[1]
© 숙대 창병모

19 파일 복사: 예

20 fclose() #include <stdio.h> int fclose ( FILE *fp ); 스트림을 닫는다
리턴 값: 성공하면 0, 실패하면 EOF (-1) 출력 버퍼에 있는 모든 자료는 파일에 저장되고, 입력 버퍼에 있 는 모든 자료는 버려진다. 프로세스가 정상적으로 종료한 경우에는 모든 열려진 스트림이 저절로 닫힌다

21 C 프로그램 개발 도구 © 숙대 창병모

22 디버거 gdb gdb 기능 컴파일 gdb 실행파일 단일 단계 이동(single stepping) 정지점(breakpoint)
변수 접근 및 수정 함수 탐색 추적(tracing) 컴파일 gcc –g 옵션을 이용하여 컴파일 gdb 실행파일 help © 숙대 창병모

23 gdb 명령어 break [file:]function run [arglist] bt print expr c next step
Set a breakpoint at [file:]function run [arglist] Start program bt Backtrace: display the program stack. print expr c Continue running program next Execute next line (after stopping); step over any function calls in the line. step Execute next line; step into any function calls in the line. quit © 숙대 창병모

24 DDD Data Display Debugger (DDD) GUI for gdb © 숙대 창병모

25 다중 모듈 프로그램 여러 개의 파일로 구성된 프로그램 reverse.h void reverse(); /* 선언 */
reverse.c #include <stdio.h> #include “reverse.h” void reverse(char *before, char *after) { int i, j, len; len = strlen(before); for (j = len-1, i=0; j>=0; j--, i++) after[i] = before[j]; after[len] = NULL; } © 숙대 창병모

26 다중 모듈 프로그램 main1.c gcc –c reverse.c main1.c
#include <stdio.h> #include “reverse.h” main() { char str[100]; reverse(“cat”, str); printf(“reverse (\”cat\”) = %s\n”, str); reverse(“noon”, str); printf(“reverse (\”noon\”) = %s\n”, str); } gcc –c reverse.c main1.c gcc –o main1 reverse.o main1.o main1 © 숙대 창병모

27 The File Dependency System Make
Why do we use make ? gcc "reverse.c" gcc -o main1 reverse.o , main1.o … to produce a new version gcc -o main2 reverse.o , main2.o … to produce a new version We want to update files automatically based on dependency rules make [ -f makefile] - updates files based on a series of dependency rules in "make file". - If no option is specified, the name "makefile" is assumed. © 숙대 창병모

28 The File Dependency System Make
make file consist of make rules targetList: dependencyList commandList targetList a list of target files dependencyList a list of files that the files in targetList depend on a list of commands that reconstructs the target files from the dependency files. © 숙대 창병모

29 The File Dependency System Make
main1: main1.o reverse.o gcc main1.o reverse.o -o main1 main1.o: main1.c reverse.h gcc -c main1.c reverse.o: reverse.c reverse.h gcc -c reverse.c Figure : make dependency tree main1 main1.o reverse.o main1.c reverse.h reverse.c reverse.h © 숙대 창병모


Download ppt "C 프로그래밍 소개 숙명여대 창병모 2011 가을."

Similar presentations


Ads by Google