C언어 - 스트림과 파일 입출력 기초(쓰기와 삭제)

2022. 11. 2. 23:55·C프로그래밍/개인 공부

입출력 함수의 분류(입출력 형식이 지정되느냐 않느냐) - 일단 눈에 익히고 가자

형식이 없는 입출력 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;
}
Colored by Color Scripter
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
'C프로그래밍/개인 공부' 카테고리의 다른 글
  • C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기
  • C언어 - 포인터의 기초
  • C언어 - 10진수를 2진수로 바꾸기(재귀함수)
  • C언어 - 구조체와 포인터
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C++
    순환
    파이썬
    스택
    백준
    드라이버 분석
    버퍼
    커널 기여
    리눅스
    c언어
    자료구조
    rubikpi3
    commit
    소수
    arm
    Qualcomm
    커널
    동적메모리
    토발즈
    이진 트리
    파일 입출력
    Git
    rubik pi
    yolo
    INIT
    앤드류모튼
    피보나치
    포인터
    Branch
    시스템콜
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
C언어 - 스트림과 파일 입출력 기초(쓰기와 삭제)
상단으로

티스토리툴바