1 / 15

Input / Output in C

KAIST SPARCS SP Seminar Sung-Jin Hong serialx at serialx.net. Input / Output in C. C Standard Library (libc). 여러 가지 공통 연산과 입출력 , 문자열 처리에 대한 표준 기능들의 모음 System Call ( 운영체제에서 제공하는 기능 ) 은 운영체제마다 사용법이 다르다 . VC++(MS libc), gcc(glibc) 각자 다른 C Standard Library 내부 구현을 포함하고 있다 . ( 사용법은 동일 !).

pascha
Download Presentation

Input / Output in C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. KAIST SPARCS SP Seminar Sung-Jin Hong serialx at serialx.net Input / Output in C

  2. C Standard Library (libc) • 여러 가지 공통 연산과 입출력, 문자열 처리에 대한 표준 기능들의 모음 • System Call (운영체제에서 제공하는 기능) 은 운영체제마다 사용법이 다르다. • VC++(MS libc), gcc(glibc) 각자 다른 C Standard Library 내부 구현을 포함하고 있다. (사용법은 동일!)

  3. File I/O (stdio.h) • 파일 입출력을 위한 함수 집합 • 사용자에게 편리하도록 많은 부분들을 추상화 • FILE pointer 를 사용한 편한 데이터 관리 • 대부분의 libc 구현체들은 내부적으로 buffering 수행을 통해 성능이 좋다 • open, write 등의 system 함수보다 일반적으로 빠르다

  4. fopen, fread, fwrite, fclose FILE *fp = fopen(“file.txt”, “r”); char buffer[1024]; fread(buffer, 1, 1024, fp); printf(“%s\n”, buffer); fclose(fp); FILE *fp2 = fopen(“file2.txt”, “w”); fwrite(buffer, 1, 1024, fp2); fclose(fp2);

  5. fseek, feof, fgets • fseek: Open한 파일의 특정 위치로 옮긴다. fread 등의 함수를 사용하면 파일상의 현재 읽는 중인 위치를 가리키는 포인터가 증가한다. 이를 원하는 특정 위치로 이동시키는 함수이다. • feof: 파일을 끝까지 읽었을 경우 참을 반환, 아니면 거짓을 반환 (Console 에서 Ctrl+d 를 눌렀을 경우도 동일) • fgets: 현재 파일의 위치로부터 줄 바꿈(\n) 까지 버퍼로 읽어들임 • fgetc: 현재 파일로부터 한 개의 글자를 입력 받음 • fungetc: 현재 파일로부터 입력 받은 한 개의 글자를 버퍼에 돌려놓음

  6. fseek, feof, fgets FILE *fp = fopen(“file.txt”, “r”); char buffer[1024]; fgets(buffer, 1024, fp); printf(“%s\n”, buffer); fseek(fp, -10, SEEK_END); fread(buffer, 1, 1024, fp); printf(“%s\n”, buffer); printf(“%d\n”, feof(fp));

  7. FILE* ? • 연 파일에 대한 정보를 저장하고 있는 구조체 • 운영체제에서 관리하는 파일 헨들러 (fd) • 현재 읽고 있는 파일상의 위치 • 읽기/쓰기 버퍼의 위치와 크기 • 기타 libc 구현에 따라 추가적인 데이터가 존재할 수 있음

  8. printf • 일정한 형식의 출력을 하고 싶을 때 사용한다 • int printf(const char *format, ...) • 예제 • printf("Color %s, number1 %d, number2 %05d, hex %x, float %5.2f.\n", "red", 123456, 89, 255, 3.14); • 출력: Color red, number1 123456, number2 00089, hex ff, float 3.14. • Aka. Placeholders (ex. ‘%s’, ‘%05d’) • ‘%’ + [0-9] + ‘.’ + [0-9] + [sdxfc…] = %([0-9]+\.[0-9])?[sdxfc…] • s = string, d = decimal, x = hexademical, f = float

  9. *printf • 파일에 쓰고 싶을 때 • int fprintf(FILE *stream, const char *format, ...) • 문자열에 쓰고 싶을 때 • int sprintf (char *str, const char *format, ...) • 문자열에 안전하게 쓰고 싶을 때 • int snprintf(char *str, size_t size, const char *format, ...)

  10. scanf • Inverse of printf • int scanf (char *format, ...); • int n; scanf("%d", &n); • Must use ‘&’ • Any whitespace characters is ignored. • sscanf, fscanf, vscanf, …

  11. stdin, stdout, stderr • 프로그램 실행 시 기본적으로 정의되어 있는 FILE pointer • stdin: 기본입력 – 사용자 키보드로부터의 입력이나 pipe 를 사용한 입력에 해당 • stdout: 기본출력 – printf 등의 함수 사용시 출력이 되는 통로 • stderr: stdout 과 기능상 동일하나 에러 출력을 위해 추가됨

  12. stdin, stdout, stderr int a, b; fscanf(stdin, “%d %d”, &a, &b); fprintf(stdout, “%d+%d = %d”, a, b, a+b); fprintf(stderr, “test error msg”);

  13. stdin, stdout, stderr serialx:~$ ./a.out 10 50 10+50 = 60 test error msg serialx:~$ echo “20 30 ” > input.txt serialx:~$ ./a.out <input.txt >output.txt test error msg serialx:~$ ./a.out <input.txt >output.txt 2> error.txt serialx:~$ cat error.txt test error msg

  14. Problem #1 • scanf 를 통해 실수 두 개를 입력 받고, 입력 받은 두 수의 합을 출력하는 프로그램을 작성하라. • input.txt 파일에서 각 줄마다 두 숫자를 입력받고 이 두 숫자의 곱을 output.txt 에 출력하는 프로그램을 작성하라.

  15. Problem #2 • stdin 으로부터 임의의 숫자를 입력 받고 이의 합을 출력하는 프로그램을 구현하라. • stdin 으로부터 숫자 하나를 입력받아 이를 소인수분해 해 출력하는 프로그램을 구현하라. • 임의의 숫자를 입력 받아 이 숫자의 합을 소인수분해 하는 프로그램을 구현하라.

More Related