입출력 함수의 분류(입출력 형식이 지정되느냐 않느냐) - 일단 눈에 익히고 가자
형식이 없는 입출력 | getchar() : 문자입력 | ||
putchar() : 문자 출력 | |||
gets() : 문자열 입력 | |||
puts() : 문자열 출력 | |||
형식이 있는 입출력 | printf() : 형식화된 출력 함수 | ||
scanf() : 형식화된 입력 함수 |
C언어에서는 모든 입출력은 스트림을 통하여 이루어진다. 그러므로 파일도 일련의 스트림으로 취급된다.
모든 파일은 입출력 동작이 발생하는 현재위치를 나타내는 파일 포인터(file pointer) = 주소를 가진다.
처음 파일을 열면 파일의 첫 번째 바이트를 가르킨다.
파일 읽기 쓰기의 순서
모든 파일은 데이터를 쓸때, open을 먼저 한다. 내부적으로는 파일과 연결된 스트림을 만들게된다.
파일을 open하고 데이터를 읽고 쓸 수 있다. 파일을 사용한 후에는 파일을 close해야한다.
그래서, open -> 데이터 읽기 쓰기 -> close 의 순서를 지켜야 한다.
파일을 open할때 특정한 모드로 open을 하는데,
기본적으로
"w" : 파일을 쓰기모드로 연다
"r" : 파일을 읽기모드로 연다
"a" : 파일을 추가모드로 연다. 기존에 파일이 있다면 데이터가 파일의 끝에 추가된다.
예시로 알아보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <stdio.h>
int main(void)
{
FILE* fp = NULL;
fp = fopen("sample.txt", "w");
if (fp == NULL) {
printf("파일 열지 못했음\n");
}
else {
printf("파일 성공적으로 열었음\n");
}
fclose(fp)
return 0;
}
|
cs |
FILE *fp = NULL; -> FILE은 stdio.h에 typedef로 선언된 구조체이다. FILE구조체의 포인터 fp를 선언하고 NULL로 초기화한다
그리고 fopen함수를 사용하여 "sample.txt"파일을 쓰기모드로 열고(파일이 존재하지 않는다면 새로 만듬) 그 주소를 포인터 fp에 넣는다.
파일의 위치를 포인터fp가 가지고 있다는 것!
파일탐색기를 이용하여 폴더를 확인해보면 "sample.txt"파일이 생성되었음을 알 수 있다.
그리고 fclose함수를 사용하여 파일을 닫는다.
파일을 삭제해보자
remove()함수를 이용
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
int main(void)
{
if (remove("sample.txt") == -1) { //-1이 반환된다면 삭제 실패
printf("파일 삭제 불가능\n");
}
else { //0반환시 삭제 성공
printf("파일 삭제했습니다.\n");
}
return 0;
}
|
cs |
파일 삭제는 remove함수를 이용한다.
remove함수는 삭제 성공하면 0을 반환하고, 실패시 -1을 반환한다.
마찬가지로 실행 후 폴더를 확인해보면 텍스트파일이 삭제된 것을 알 수 있다.
'C프로그래밍 > 개인 공부' 카테고리의 다른 글
C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기 (0) | 2022.12.10 |
---|---|
C언어 - 포인터의 기초 (0) | 2022.11.20 |
C언어 - 10진수를 2진수로 바꾸기(재귀함수) (1) | 2022.10.13 |
C언어 - 구조체와 포인터 (0) | 2022.08.09 |
C언어 - 문자열 변경, 문자열 상수와 포인터 (0) | 2022.08.09 |