파일 입출력(File I/O)
파일 입출력의 개념
파일 입출력(File I/O)은 프로그램이 파일을 통해 데이터를 읽고 쓰는 과정을 의미합니다. 이는 프로그램이 실행되는 동안 데이터를 영구적으로 저장하거나, 외부 데이터 소스를 활용하여 프로그램의 기능을 확장하는 데 필수적인 작업입니다. 파일 입출력은 텍스트 파일, 바이너리 파일 등 다양한 형식의 파일을 다룰 수 있으며, 이를 통해 데이터의 영속성을 확보하고, 프로그램 간의 데이터 공유를 가능하게 합니다. 파일 입출력은 대부분의 프로그래밍 언어에서 지원되며, 각 언어마다 파일을 다루는 방법이 다소 다를 수 있습니다.
파일 열기와 닫기
파일을 사용하기 위해서는 먼저 파일을 열어야 합니다. 파일을 열 때는 파일의 경로와 모드를 지정해야 합니다. 일반적으로 사용되는 모드는 읽기(r), 쓰기(w), 추가(a) 모드가 있으며, 각 모드는 파일을 여는 방식에 따라 다릅니다. 예를 들어, C 언어에서는 fopen 함수를 사용하여 파일을 열 수 있습니다:
FILE *file = fopen("data.txt", "r");
파일을 성공적으로 열면, 파일 포인터를 통해 파일에 접근할 수 있습니다. 작업이 끝난 후에는 fclose 함수를 사용하여 파일을 닫아야 합니다. 파일을 닫지 않으면 메모리 누수나 데이터 손실이 발생할 수 있습니다.파일 읽기와 쓰기
파일에서 데이터를 읽거나 쓰는 과정은 파일 입출력의 핵심입니다. 파일에 데이터를 쓰기 위해서는 fprintf, fwrite 등의 함수를 사용할 수 있습니다. 예를 들어, C 언어에서 텍스트 파일에 문자열을 쓰는 방법은 다음과 같습니다:
FILE *file = fopen("output.txt", "w");
fprintf(file, "Hello, World!\n");
fclose(file);
파일에서 데이터를 읽는 방법은 fscanf, fread 등을 사용합니다. 다음은 파일에서 문자열을 읽는 예시입니다:
char buffer[100];
FILE *file = fopen("input.txt", "r");
fgets(buffer, sizeof(buffer), file);
fclose(file);
이와 같이 파일 입출력 함수를 사용하여 데이터를 읽고 쓸 수 있습니다.파일 포인터와 오류 처리
파일 입출력 작업을 수행할 때, 파일 포인터는 파일의 현재 위치를 나타내며, 이를 통해 파일의 특정 위치에서 데이터를 읽거나 쓸 수 있습니다. 파일 포인터는 fseek, ftell, rewind 등의 함수를 사용하여 조작할 수 있습니다. 예를 들어, fseek 함수를 사용하여 파일의 특정 위치로 이동할 수 있습니다:
fseek(file, 0, SEEK_END);
또한, 파일 입출력 작업 중 오류가 발생할 수 있으므로, 항상 오류 처리를 고려해야 합니다. 파일이 존재하지 않거나, 읽기/쓰기 권한이 없을 경우, fopen 함수는 NULL을 반환합니다. 이를 확인하여 적절한 오류 메시지를 출력하거나, 대체 작업을 수행할 수 있습니다.
바이너리 파일과 텍스트 파일
파일 입출력에서 다룰 수 있는 파일 형식에는 텍스트 파일과 바이너리 파일이 있습니다. 텍스트 파일은 사람이 읽을 수 있는 형식으로 데이터를 저장하며, 일반적으로 줄 단위로 데이터를 처리합니다. 반면, 바이너리 파일은 데이터를 이진 형식으로 저장하여, 보다 효율적으로 데이터를 저장하고 읽을 수 있습니다. 바이너리 파일은 구조체와 같은 복잡한 데이터 구조를 저장하는 데 유용합니다. 바이너리 파일을 다룰 때는 fwrite, fread 함수를 사용하여 데이터를 직접적으로 읽고 쓸 수 있습니다.