1 / 17

단말기의 비정규 입력

단말기의 비정규 입력. 컴퓨터 정보학부 2003242091 윤 현 철. ※ 목 차. 프로그램 개요 주요 항목 요약 소스 소개 시현. ※ 개 요. 예제 5-2 프로그램 타이핑 연습 프로그램 작성 잘못 입력 시 경고음과 특수문자 출력. ※ 주요 항목 요약. ioctl TCGETA TCSETAW TCSETAF c_lflag ISIG ICANON ECHO c_cc VMIN fileno isatty setbuf. ※ ioctl< 장치제어 >.

allan
Télécharger la présentation

단말기의 비정규 입력

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. 단말기의 비정규 입력 컴퓨터 정보학부 2003242091 윤 현 철

  2. ※ 목 차 • 프로그램 개요 • 주요 항목 요약 • 소스 소개 • 시현

  3. ※ 개 요 • 예제 5-2 프로그램 • 타이핑 연습 프로그램 작성 • 잘못 입력 시 경고음과 특수문자 출력

  4. ※ 주요 항목 요약 • ioctl • TCGETA • TCSETAW • TCSETAF • c_lflag • ISIG • ICANON • ECHO • c_cc • VMIN • fileno • isatty • setbuf

  5. ※ ioctl<장치제어> • int ioctl(int fildes, int request, struct termio) • 장치 하드웨어, 드라이버 소프트웨어 옵션 세트 • 장치마다 동작들이 다름 • 장치 드라이버에 의해 정의

  6. ※ int ioctl(…, TCGETA, &tty) • Ioctl이 단말기의 현재상태를 tty에 복사

  7. ※ int ioctl(…, TCSETAW, &tty) • tty의 값으로 단말기의 상태를 지정 • 값 지정 전 출력 큐가 비워질 때까지 대기 • 단말기 출력에 관한 인수 변경할 때 사용

  8. ※ int ioctl(…, TCSETAF, &tty) • 출력 큐가 비워질 때까지 대기 • 입력 큐를 청소 • 단말기의 상태를 TTY값으로 지정

  9. ※ c_lflag • 단말기의 기능 제어 • ISIG –특수 제어 문자와 비교하여 검사 • ICANON –정규 처리 기능 • ECHO –입력된 문자의 반향 출력 정규 처리 설정 시 가능

  10. ※ c_cc • 제어 문자가 정의된 배열 • VMIN –입력 문자의 수

  11. ※ fileno(stdout) • 스트림의 파일 핸들 조사 • 반환값은 조사한 파일의 핸들값

  12. ※ isatty(fileno(stdout)) • 인수가 문자입출력용 장치와 연결되있나 조사 • 장치파일은 0 이외의 값, 그 외는 0을 리턴

  13. ※ setbuf(stdout, (char *)NULL) • 별도의 버퍼 사용하고 싶을 경우 사용 • 이 경우 데이터는 스트림에 바로 출력

  14. ※ 소스 소개 (1) #include <stdio.h> #include <fcntl.h> #include <termio.h> #include <stdlib.h> //2)exit()함수 #include <string.h> //3)strlen()함수 main(argc,argv) int argc; char *argv[];{ char ch, *text = "My name is Yoon Hyun Chul"; int fd, i, errors = 0, len; //1)open(),strlen() 삭제 struct termio tty, savtty; //단말기 문자 특수 파일 open fd = open("/dev/tty", O_RDONLY);

  15. ※ 소스 소개 (2) //단말기의 현재 특성을 얻음 ioctl(fd, TCGETA, &tty); //함수 이용, 현재 출력 파일이 단말기인지 검사 if(isatty(fileno(stdout)) == 0){ fprintf(stderr,"stdout not terminal\n"); exit(1); } savtty = tty; //비정규모드,비반향, 비검사 모드로 세트 tty.c_lflag &= ~(ISIG | ICANON | ECHO); //한 문자 입력 대기 tty.c_cc[VMIN] = 1; /* MIN */ //새로운 플래그 설정 ioctl(fd, TCSETAW, &tty); //putchar함수가 즉시 write 시스템 호출을 이용 ,출력하게끔 설정 setbuf(stdout, (char *) NULL);

  16. ※ 소스 소개 (3) printf("Type beneath th efollowing line\n\n%s\n", text); len = strlen(text); for(i=0; i<len; i++){ read(fd, &ch,1); //입력 if(ch == text[i]) //문자가 같을경우 putchar(ch); //출력 else{ putchar('\07'); //경고음 putchar('*'); //문자출력 errors++; //에러개수카운트 } }//End of for loop //본래의 단말기 상태를 재설정 ioctl(fd, TCSETAF, &savtty); printf("\n\nnumber of errors: %d\n",errors); }//End of main function

  17. ※ 시 현

More Related