C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-8일차-
메모리 관리, 파일
정대진
(2014.08.13)
1
목차
 복습
 파일입출력
 TCP 프로그램 예제
KAIST IT 아카데미
2
C Programming B반
복습 (1)
 메모리관리
 동적으로 메모리 할당
• Heap 영역에 할당
• stdlib.h 헤더파일
• malloc() 함수 사용
 void*형이 반환이므로 사용하는 포인터형으로 캐스팅
• free() 함수
 메모리를 다 사용하고 나면 메모리를 반환
 전처리기
 컴파일러가 실행하기 전 실행
 함수 macro
• 소괄호 사용의 중요성
• 호출의 빈도수가 높을 경우
 조건부 컴파일 (#if #else #ifdef #elif #endif)
KAIST IT 아카데미
3
C Programming B반
복습 (2)
 구조체
 typdef struct 이름 {
내부 변수 선언;
}타입이름;
 . 연산자를 통해서 내부 변수 접근
 구조체 포인터
•
•
•
•
구조체 포인터로 본인의 포인터 선언 가능
포인터를 통한 내부 변수 접근
*(구조체변수).내부변수
구조체변수->내부변수
 열거형
• 의미있는 상수/변수 생성
KAIST IT 아카데미
4
C Programming B반
파일 입출력
 파일 스트림
 파일로부터의 데이터 입출력을 위해서 스트림 형성이 필수
KAIST IT 아카데미
5
C Programming B반
파일 입출력
 fopen() 함수를 통한 파일스트림 생성
KAIST IT 아카데미
6
C Programming B반
파일 입출력
 fopen() 함수를 통한 파일스트림 생성
KAIST IT 아카데미
7
C Programming B반
파일 입출력
 파일 출력 스트림
KAIST IT 아카데미
8
C Programming B반
파일 입출력
 파일 입력 스트림
KAIST IT 아카데미
9
C Programming B반
파일 입출력
 파일에 데이터 쓰기
KAIST IT 아카데미
10
C Programming B반
파일 입출력
 파일 스트림 닫기 fclose() 함수
KAIST IT 아카데미
11
C Programming B반
파일 입출력
 파일에서 데이터 읽기
KAIST IT 아카데미
12
C Programming B반
파일 입출력
 파일 스트림 (파일 개방 모드) 구분
KAIST IT 아카데미
13
C Programming B반
파일 입출력
 Read / Write
 + : 읽기, 쓰기 모두 가능
 a : 덧붙여 쓰기 가능
KAIST IT 아카데미
14
C Programming B반
파일 입출력
 Text / Binary
KAIST IT 아카데미
15
C Programming B반
파일 입출력
 파일 개방 모드 조합
KAIST IT 아카데미
16
C Programming B반
파일 입출력
 왜 text 모드가 존재하는가!?
 ‘\n’ : 개행
 개행을 표시하는 방법이 운영체제마다 다름
 개행 정보를 정확히 저장하기 위해서 운영체제에 맞게 ‘\n’을
변환 시켜서 저장해야 함
 Text 모드에서는 이것이 자동으로 이뤄짐
KAIST IT 아카데미
17
C Programming B반
파일 입출력
 파일 입출력 함수
KAIST IT 아카데미
18
C Programming B반
파일 입출력
 파일 스트림
KAIST IT 아카데미
19
C Programming B반
파일 입출력
 파일 복사 프로그램 - 문자단위
KAIST IT 아카데미
20
C Programming B반
파일 입출력
 파일 복사 프로그램
- 문자열단위
KAIST IT 아카데미
21
C Programming B반
파일 입출력
 바이너리 데이터 입출력 fread()
KAIST IT 아카데미
22
C Programming B반
파일 입출력
 바이너리 데이터 입출력 fwrite()
KAIST IT 아카데미
23
C Programming B반
파일 입출력
 바이너리 파일 복사 프로그램
KAIST IT 아카데미
24
C Programming B반
파일 입출력
 파일 서식 입출력
KAIST IT 아카데미
25
C Programming B반
파일 입출력
 구조체의 파일 입출력
KAIST IT 아카데미
26
C Programming B반
파일 입출력
 파일 위치 지시자
 파일 입출력 관련 함수 (fputs, fread, fwrite 등등)가 호출될 때 마
다 파일 우치 지시자의 참조 위치 변경
KAIST IT 아카데미
27
C Programming B반
파일 입출력
 파일 위치 지시자의 이동 fseek()
KAIST IT 아카데미
28
C Programming B반
파일 입출력
 fseek() 함수 호출 예
KAIST IT 아카데미
29
C Programming B반
TCP 소켓 프로그래밍
 TCP?
 인터넷의 transport layer
• TCP
 Transmission Control Protocol
 패킷을 확실하게 전송 (전송, 실패 여부를 알 수 있음)
 상대적으로만 느릴 뿐 빠름
• UDP
 User Datagram Protocol
 패킷이 도착했는지 보장이 없음
 빠름
KAIST IT 아카데미
30
C Programming B반
TCP 소켓 프로그래밍
 Server
 서비스를 제공하는 측
 Client
 서비스를 제공받는 측
 Server-Client
 서버는 클라이언트의 접속을 기다리고 있음
KAIST IT 아카데미
31
C Programming B반
TCP 소켓 프로그래밍
 IP 주소
 XXX.XXX.XXX.XXX
• IPv4 의 주소 시스템
 사람들의 집주소와 유사한 개념
 Port #
 프로세스를 지칭할 수 있는 번호
 집주소의 수령인과 유사한 개념
KAIST IT 아카데미
32
C Programming B반
TCP 소켓 프로그래밍
 TCP 프로그래밍을 하기 위해 필요한 정보





KAIST IT 아카데미
통신에 사용할 프로토콜 (우리는 TCP)
자신의 IP주소
자신의 Port#
상대방의 IP주소
상대방의 Port#
33
C Programming B반
TCP 소켓 프로그래밍
 우리가 만들 프로그램




Echo server / client
서버에 클라이언트 접속
클라이언트에서 메시지 전송
서버에서 클라이언트의 메시지를 그대로 다시 클라이언트로 전
송
 클라이언트에서 받은 메시지를 화면에 출력
KAIST IT 아카데미
34
C Programming B반
TCP 소켓 프로그래밍
 우리가 만들 프로그램
KAIST IT 아카데미
35
C Programming B반
TCP 소켓 프로그래밍 (서버)
 Header 및 lib추가
KAIST IT 아카데미
36
C Programming B반
TCP 소켓 프로그래밍 (서버)
 소켓 초기화
KAIST IT 아카데미
37
C Programming B반
TCP 소켓 프로그래밍 (서버)
 Bind & Listen & Accept
 Socket과 컴퓨터의 주소와 연결
 클라이언트의 연결을 기다림
 연결을 수락함
KAIST IT 아카데미
38
C Programming B반
TCP 소켓 프로그래밍 (서버)
 클라이언트와 데이터 통신 & 종료
KAIST IT 아카데미
39
C Programming B반
TCP 소켓 프로그래밍 (클라이언트)
 Header 및 lib추가
KAIST IT 아카데미
40
C Programming B반
TCP 소켓 프로그래밍 (클라이언트)
 소켓 초기화 및 connect
KAIST IT 아카데미
41
C Programming B반
TCP 소켓 프로그래밍 (클라이언트)
 연결 후 내용들






문자열 입력
엔터 제거
데이터 전송
데이터 수신
수신데이터 출력
반복~반복~
KAIST IT 아카데미
42
C Programming B반
TCP 소켓 프로그래밍
 실행 결과
KAIST IT 아카데미
43
C Programming B반