리눅스 C언어 프로그램 종료후 커널 stdout에 자료 남는것 지우는방법좀알려주세요 ㅠ
글쓴이: soseazi / 작성시간: 화, 2010/05/04 - 4:21오전
#include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <termios.h> #include <stdlib.h> /* file descriptor for standard input */ #define STDIN 0 int main(int argc, char *argv[ ]) { struct timeval tval; fd_set readfds; tval.tv_sec = 5; tval.tv_usec = 800000; struct termios initial_settings, new_settings; FILE *input; FILE *output; input = fopen("/dev/tty", "r"); output = fopen("/dev/tty", "w"); if(!input || !output) { fprintf(stderr,"unable to open /dev/tty\n"); exit(1); } tcgetattr(0, &initial_settings); new_settings = initial_settings; new_settings.c_lflag &= ~ICANON; new_settings.c_cc[VMIN] = 5; new_settings.c_cc[VTIME] = 0; if(tcsetattr(0, TCSANOW, &new_settings) !=0) fprintf(stderr,"could not set attributes\n"); FD_ZERO(&readfds); FD_SET(STDIN, &readfds); /* don’t care about writefds and exceptfds: */ select(STDIN+1, &readfds, NULL, NULL, &tval); if (FD_ISSET(STDIN, &readfds)) printf("\nA key was pressed lor!\n"); else printf("Timed out lor!...\n"); tcsetattr(fileno(input),TCSANOW,&initial_settings); fflush(stdout); fflush(stdin); return 0; }
대충 소스는 이렇습니다.
그냥 소켓프로그래밍하면서 select를 배우는과정에 조금 지져분하게 되어서 고치려고하는데요
프로그램을 실행을한다음에 5개의 문자를입력하게되면 noncanonical 모드이기에 바로 입력이되면서 그냥 프로그램이 종료가되는데요
종료가 되면 커널 입력창에 입력된 5개문자가 고스란히 나오게 되어서 이것좀 없애고싶어서요
그래서 fflush로하는건지 아니면 system("clear")로도해봐도안되고
터미널을 사용해서 하는건지 영모르겠어서요 ㅠ
./select 로 실행한후
입력하세요 : abcde 입력하면
프로그램종료
root@root:abcde
이렇게 됩니다 해결방법좀알려주세요 ㅠ
Forums:
어디가 문제인지는
어디가 문제인지는 제딴에는 알수없지만,
우선 파일 오픈 한것은 닫아 주셔야 돼요~~ : )
흘러가고있는 지금 이 시간에 충실하자.
흠...우분투쓰거든요;;?
터미널열고 저거 컴파일해서 abcde 입력하면
프로그램 종료후
다음 터미널 입력 부분에 고스란히 abcde가 남아서 옵니다
요게 문제 ㅠ
new_settings.c_lflag &=
new_settings.c_lflag &= ~ECHO;
이것도 넣어보세요.
========================
http://kldp.net/projects/mimic
new_settings.c_lflag &= ~ECHO 이것은
이것은 입력되는 글씨를 안보이게 하는거로 알고있습니다;ㅠ
댓글 달기