ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C 라이브러리
    스트림 IO/기타 2008. 12. 14. 16:34
    C에서, 파일(file)은 디스크 파일에서 터미널 또는 프린터에 이르기까지 어떤 것도 될 수 있다. 열기(open) 연산을 수행하여 특정 스트림과 파일을 연관시킬 수 있다. 파일과 연관된 각 스트림은 FILE형의 파일 제어구조를 가진다.

    스트림(논리적 장치)
    C에서, 모든 입출력 연산들을 수행하기 위해서 스트림만을 생각한다.
    접근할 실제 장치(파일)와는 무관하게 C 프로그래머에게 '일관성 있는 인터페이스'
    터미널, 디스크 드라이버, 및 테입 드라이버 등을 포함하여 다양한 장치들과 동작

    텍스트 스트림
    2진 스트림

    표준 스트림은 파일 포인터이다.
    stdin
    stdout
    stderr

    size_t    // unsinged int
    fpos_t    // unsinged int

    fopen()
    대부분의 경우에 파일은 디스크 파일을 의미한다.

    만일 파일에 쓰기 위해서 fopen()을 사용하여 파일을 열면, 같은 이름으로 이전에 이미 존재하는 파일은 없어지며 새로운 파일이 생성된다. 만일 같은 이름의 파일이 없다면, 단지 이것이 생성된다. 만일 파일의 끝에 추가하려고 한다면, 모드 "a"를 사용해야 한다. 읽기 연산은 이미 존재하는 파일들에 대해서만 열 수 있다. 만일 이때 그 파일이 존재하지 않으면, 오류가 리턴된다. 마지막으로, 파일이 읽기/쓰기 연산으로 열릴 때 그 파일이 이미 존재하면 삭제되지 않는다. 그러나, 만일 그 파일이 이미 존재하지 않으면, 생성된다.

    r    // 읽기를 위해 텍스트 파일 열기
    rb    // 읽기를 위해 2진파일  열기

    w    // 쓰기를 위해 텍스트 파일 열기
    wb    // 쓰기를 위해 2진파일  열기

    a    // 특정 텍스트 파일에 추가하기
    ab    // 2진 파일에 추가하기

    r+    // 읽기/쓰기를 위해서 텍스트 파일 열기
    r+b    // 읽기/쓰기를 위해서 2진 파일 열기

    w+    // 읽기/쓰기를 위해서 텍스트 파일 생성하기
    w+b    // 읽기/쓰기를 위해서 2진 파일 생성하기

    a+    // 읽기/쓰기를 위해서 텍스트 파일을 추가하거나 생성하기
    a+b    // 읽기/쓰기를 위해서 2진 파일을 추가하거나 생성하기
    freopen()
    fclose()
    대부분의 경우에, 특정 순간에 열 수 있는 파일들의 수를 운영체제에서 제한하기 때문에, 제한된 파일 수만큼 열렸을 때 또 다른 파일을 열기 전에 하나의 파일을 닫아야 한다.    // FOPEN_MAX
    ferror()
    각 파일 연산은 오류 조건을 설정하기 때문에, ferror()은 각 파일 연산 바로 다음에 호출되어야 한다.

    feof()
    getc()
    fgetc()
    putc()
    fputc()
    fread()
    fwrite()
    2진 자료를 위해서 파일을 열기만 하면, fread()와 fwrite()는 어떤 형의 정보도 읽고 쓸 수 있다.
    fputs()
    fgets()
    만일 뉴라인이 읽혀지면, 이것은 (gets() 함수와는 달리) 문자열의 일부가 된다.
    gets()
    입력받는 문자열 길이를 제한할 수 없어서 보안에 취약
    fscanf()
    fprintf()

    fseek()
    SEEK_SET
    SEEK_CUR
    SEEK_END

    rewind()

    fflush()

    콘솔 입출력 함수(문자 IO?)
    ANSI C 표준은 (커서 위치잡기 같은) 여러 가지 화면 제어 동작을 수행하거나, 또는 그래픽스를 정의하는 함수들은 기계에 따라 매우 다양하기 때문에 포함하지 않고 대신에, 표준 C의 콘솔 입출력 함수들은 TTY-기반의 출력만을 수행한다.

    입출력의 방향(stdin, stdout)을 재설정해서 디스크 파일 입출력을 수행할 수도 있다.

    #include <stdio.h>
    라인-버퍼(line-buffered) 입력
    getchar()
    입력된 키는 자동적으로 화면으로 반향된다.
    putchar()
    화면의 현재 커서 위치에 문자를 출력한다.

    #include <conio.h>
    interactive
    getch()
    getche()
    화면에 키를 반향
    /*
    gets()
    ENTER를 사용하기 전까지는 백스페이스 키를 이용하여 잘못 입력된 문자들을 수정할 수 있다.
    (fgets() 함수와는 달리)캐리지 리턴은 문자열의 일부가 아니다.
    */
    puts()
    자신의 문자열 인자와 뉴라인를 화면에 출력한다.
    printf()를 호출할 때보다 훨씬 부담이 없다.
    포맷 변환 등을 할 수 없다.

    포맷된 입출력
    문자, 문자열, 및 숫자 등을 포함하여 내정된 자료형들에 대해서 IO를 수행

    printf()
    scanf()
    다른 형의 자료를 읽을 때 필드의 분리를 위해서 스페이스, 탭, 및 뉴라인이 사용될 수 있지만, 하나의 문자를 읽을 때, 공란 문자는 다른 어떤 문자들과 유사한 방법으로 읽는다.

    공란문자는 공란, 뉴라인, 또는 탭 등이다.
    공란 문자는 입력으로부터 하나 또는 그 이상의 공란 문자들을 뛰어넘도록 한다.
    비공란 문자는 입력에서 대응하는 문자들을 읽고 삭제된다.

    문자열 읽기 - 공란문자를 만날 때까지 입력 문자들을 읽을 수 있다.

    참조 사이트:
Designed by Tistory.