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

Slides:



Advertisements
Similar presentations
Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
Advertisements

C 프로그래밍 기초.
제12장 표준 입출력과 파일 입출력.
[ 단원 12 ] 파일처리 부산대학교 남 태 우.
Basic of Buffer Over Flow
Project #2-2. Pintos User Program
Linux/UNIX Programming
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
제3장 C 프로그래밍 환경.
고급 시스템 프로그래밍 제1장 소개 창병모 숙명여대 컴퓨터과학과.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
6 레이스 컨디션.
제 11장 C 프로그래밍.
-Part3- 제3장 콘솔 입출력과 파일 입출력.
프로그래밍실습 제 18 강.
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
제 8 장  파서 생성기 YACC 사용하기.
Department of Computer Engineering
System Call Linux Kernel 수업 3번째.
FUSING.
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
제9장 C 프로그래밍 환경 창병모
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
버퍼 오버플로우 시스템보안 류기환 권재홍.
Using Standard I/O on Sockets
Department of Computer Engineering
레이스 컨디션 컴퓨터공학과 4학년 이교욱.
Computer Architecture
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Geek-OS Project 정영진
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
Chapter 11 Strings.
Chapter 4. 보조자료 - 파일 입출력 파일의 기본 개념과 특징을 이해한다. 파일 처리 과정을 이해한다.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
Department of Computer Engineering
전자의료시스템 및 실습 C-언어 구 환 경희대학교 전자정보대학 동서의료공학과.
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
Chapter 13 Input/Output and Files
Linux/UNIX Programming
17강 파일처리함수(1) 강 의 내 용 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정
18강 파일처리함수(2) 강 의 내 용 순차파일 만들기와 읽기 순차파일 입출력함수 랜덤파일 처리
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
B+Tree프로그램 설치 및 운용 Database Laboratory
Linux Programming Spring 2008
제2장 데이터형과 표준 입출력문 문봉근.
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
Linux/UNIX Programming
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.
Linux/UNIX Programming
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
파일 입출력.
C언어 개론.
GDB - GNU Debugger 김진용.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
C.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
C프로그래밍 도구 컴퓨터공학과 강성인.
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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 ; © 숙대 창병모

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

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

표준 입출력: 예

파일 출력: 예 // 키보드에서 문자를 입력 받아 파일에 출력하는 예제 #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); } © 숙대 창병모

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

파일 복사: 예

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

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

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

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 © 숙대 창병모

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

다중 모듈 프로그램 여러 개의 파일로 구성된 프로그램 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; } © 숙대 창병모

다중 모듈 프로그램 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 © 숙대 창병모

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. © 숙대 창병모

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. © 숙대 창병모

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 © 숙대 창병모