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반