C언어 : 표준 입출력 라이브러리

지환·2022년 1월 2일
0

C언어

목록 보기
10/37
post-thumbnail

표준 입출력 라이브러리

  • 컴퓨터의 주기억 장치인 램은 전원이 켜져 있을 때만 데이터를 유지할 수 있다.

  • 하지만 컴퓨터를 365일 켜 놓을 순 없기 때문에 보조기억 장치(디스크 ,SSD, HDD)가 필요하다.

  • 하지만 보조기억 장치가 너무 다양하기 때문에 프로그래머가 일일이 보조기억 장치의 특성을 파악하는게 힘들다.

  • 파일 입출력 라이브러리도 운영체제에 따라 조금씩 다르다. 운영체제별로 제공하는 입출력 함수는 이름뿐만 아니라 사용법도 다르다.

  • 윈도우 환경에서 파일 입축력 프로그래밍을 하다가 리눅스 환경에서 작업하게 되면 파일 입출력을 다시 공부해야 된다.(그 만큼 다르다)

  • 이런 문제를 해결하기 위해 C언어는 표준 입출력 라이브러리를 제공한다.

  • 표준 입출력 라이브러리는 데이터의 형식에 따라 다른 함수를 제공한다.

  1. 텍스트(문자열)
  2. 바이너리(이진)

바이너리 속성과 문자열 속성

  • 프로그램이 사용하는 데이터 속성은 크게 두 가지다.
  1. 데이터에 다른 의미를 부여하지 않고 숫자 그 자체로 보는 바이너리
  2. 속성과 숫자를 아스키 값으로 변환해서 사용하는 문자열 속성
  • 예를 들어 97이라는 데이터를 단순히 숫자 97이 들어 있는 1바이트 크기의 정보라고 처리하는 것이 바이너리 속성이고 아스키 값 'a'로 처리하는 것이 문자열 속성이다.

  • 데이터는 같은데 그 데이터를 이해하는 기준이 서로 다르기 때문에 두 속성은 처리 방법이나 처리 결과에 차이가 생긴다.
  • 다음과 같이 배열로 선언한 크기가 8바이트인 temp 변수가 있다. 이 변수에 "abc"문자열이 저장되어 있다고 가정해보자.
char temp[8] = {'a', 'b', 'c', 0, }; 
// 마지막 쉼표 이후의 값은 모두 NULL 문자를 의미하는 아스키 값 0으로 초기화함 

두 속성의 차이점을 살펴보자.

  1. 변수에 저장된 데이터의 크기를 구할 때 차이점이 존재한다.
int data_size = sizeof(temp); 
// 변수의 크기를 구한다. data_size에는 값 8이 저장된다.
  • 반면에 문자열 속성은 temp 변수에 저장된 문자열의 길이를 구하면 변수의 크기를 구할 수 있기 때문에 string.h에서 제공하는 strlen 함수를 사용해 문자열 길이를 구한다.
int data_size = strlen(temp); 
// 문자열 길이를 구한다. data_size에는 값 3이 저장된다.
  1. 변수에 저장된 값을 다른 변수에 복사할 때 차이점이 존재한다.
  • 바이너리 속성과 문자열 속성은 temp 변수에 저장된 데이터를 다른 변수에 복사할 때도 서로 다른 함수를 사용한다.

  • 바이너리 모드는 변수에 들어 있는 값을 그대로 복사하는 개념을 사용해야 되기 때문에 temp 변수의 값을 dest 변수로 복사하려면 memcpy 함수를 사용한다.

<바이너리>

char temp[8] = {'a', 'b', 'c', 0,};
char dest[8];
memcpy(dest, temp, sizeof(temp)); 
//temp에서 dest로 8바이트 크기만큼 메모리를 복사한다.

<문자열>

char temp = {'a', 'b', 'c', 0,};
char dest[8];
strcpy(dest, temp);
// temp에서 dest로 4바이트 크기(NULL 문자 0까지 포함)만큼 복사한다.
  • memcpy와 strcpy 함수를 비교해 보면 strcpy가 더 간단하고 메모리를 복사하는 양도 적다.

  • 하지만 memcpy는 특별한 체크나 데이터 가공 없이 메모리를 그대로 복사하는 함수다.

-strcpy는 내부적으로 문자를 하나 복사할 때마다 문자열이 끝이 났는지 제대로 된 문자인지를 계속 체크하면서 복사하는 함수다.

  • memcpy 함수가 strcpy 함수보다 더 빠르게 동작할 수밖에 없다.

바이너리 파일과 텍스트 파일

  • 바이너리 속성 개념이 적용된 파일이 바이너리(Binary) 파일
    ex: 이미지파일, 음악파일, 동영상파일. 실행파일

  • 문자열 속성이 적용된 파일을 텍스트(Text) 파일이라고 한다.
    ex: 프로그램에서 사용하는 소스 파일

  • 대부분의 파일은 바이너리 파일을 사용한다. 저장 방식이나 처리 효율이 좋기 때문이다.

<출처 : DO IT C언어 - 김성엽>

profile
아는만큼보인다.

0개의 댓글