ungetc(3)

#include <stdio.h>

int ungetc(int c, FILE *stream);

stream으로 부터 1바이트 읽은 데이터를 마치 안읽은 것처럼 다시 되돌리는 경우에 사용합니다. 데이터는 int type이지만 되돌릴 때에는 (unsigned char)로 type casting되어 되돌립니다. 즉, 1바이트 이외의 상위 바이트는 모두 잘리게 됩니다.

 

 

파라미터

c
    -  되돌릴 1바이트 데이터
stream
    - fopen(3) 등으로 생성한 FILE *.

 

RETURN

c
    - 정상적으로 stream으로 되돌렸으면, 데이터인 c를 return합니다.

EOF
    - 오류가 발생하였거나 end of file입니다.

 

 


활용 예제

 

Sample. 뛰어쓰기 단위로 문자열 얻기

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>

int skip_space_char(FILE *fp)
{
    int ch;

    while((ch = fgetc(fp)) != EOF) {
        /* space, tab, crrage return, line feed 등의 문자이면 버림*/

        if(isspace(ch)) {
            continue;
        } else { /* space문자가 아니면 다시 되돌림*/
            ungetc(ch);
            return 1;
        }
    }

    return 0;
}

int get_word(FILE *fp, char *data, int len)
{
    int idx = 0;
    int ch;

    while((ch = fgetc(fp)) != EOF) {
        if(isspace(ch)) {
            data[idx] = 0x00;
            return idx;
        } else {
            data[idx] = ch;
        }
    }

    data[idx] = 0x00;

    return idx;
}

int main(int argc, char *argv[])
{
    FILE *fp;
    int  size;
    char data[2048];

    if((fp = fopen("mydata.dat", "r")) == NULL) {
        fprintf(stderr, "file open error: %s\n", strerror(errno));
        return 1;
    }

    while(1) {
        if(skip_space_char(fp) == 0) {
            break;
        }

        if((size = get_word(data, fp)) == 0) {
            break;
        }

        printf("%s\n", data);
    }

    fclose(fp);

    return 0;
}

 

 


see also :

    File 속성 정보 및 파일 관리 Library

    Directory 정보 조회 및 관리 Library

    System Call File I/O Library

    Stream File I/O Library

 

 

블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요