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언어 - 구조체와 포인터
Minu Jin
Minu Jin
정보의 바다
  • Minu Jin
    뇌 구조가 바이너리
    Minu Jin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
        • start_contribute()
        • start_analyse()
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바