본문 바로가기

About 배우고 익히는법

(59)
[TCP/IP] SIGPIPE [SIGPIPE] 프로세스가 읽기가 안되는 파이프에 쓰려고 한다면, 커널로 부터 SIGPIPE 신호를 받게 된다. 이것은 두개 이상의 프로세스가 파이프라인에 포함되어 있을 때 필수적이다. 참고로, 모든 시그널이 임의의 쓰레드로 전달되는 것은 아닙니다. SIGFPE (부동 소수점 연산 오류), SIGSEGV (메모리 접근 오류) 등과 같이 명백하게 시그널을 발생시킨 쓰레드가 정해져 있는 경우는 해당 쓰레드에게 시그널이 전달됩니다. 이런 시그널을 synchronous signal 이라고 하는데, SIGPIPE도 이 범주에 들지 않을까 합니다. 클라이언트에서 소켓을 끊었다고 해서 서버에 SIGPIPE가 전달되는 것은 아닙니다. SIGPIPE는 상대방이 닫은 fd로 쓰기를 하려는 순간에 발생합니다. 파이프 닫기..
[TCP/IP] signal(SIG_CHLD, SIG_IGN) Programming/Etc(펌&자료) 2009/07/12 00:36 signal(SIG_CHLD, SIG_IGN) child 프로세스가 종료되었을 때 zombi가 되는 것을 방지.. [출처] signal(SIG_CHLD, SIG_IGN)|작성자 소룡매냨 ----------------------------------------------------------------------------------------- 레뎃 9에서만 뜨는 에러 같긴한데... ns kernel: application bug: test.d(17445) has SIGCHLD set to SIG_IGN but calls wait() 이 말의 의미는 "SIG_IGN을 SIGCHLD에 설정해놓으면, SIGCHLD 시그널이 올라왔을 때 프..
[TCP/IP] signal set 관련 함수 (sigemptyset, sigaddset, sigdelset, sigprocmask) Programming/Etc(펌&자료) 2009/07/12 01:09 #include int sigemptyset(sigset_t * set) set 이 가리키고 있는 시그널 집합을 초기화 한다. 성공시에 0을 return 하고, 실패시에 -1을 return 한다. int sigaddset(sigset_t * set, int signum) set 이 가리키고 있는 시그널 집합에 signum을 추가한다. 성공시에 0을 return 하고, 실패시에 -1을 return 한다. int sigdelset(sigset_t * set, int signum) set 이 가리키고 있는 시그널 집합에 signum을 삭제한다. 성공시에 0을 return 하고, 실패시에 -1을 return 한다. int sigprocmask..
[Linux] 리눅스에서 getch() 사용 키보드 입력을 화면에 출력하지 않고 읽어오는 getch() 에 해당하는 함수가 gcc library 에는 존재하지 않습니다. 따라서 터미널의 설정을 변경하여 터미널 echo와 canonical 모드를 끄고 입력 버퍼를 1로 만든 후 키보드 입력을 읽고 터미널 설정을 원래대로 복원하는 방식으로 구현하여 사용할 수 있습니다. #include int getch(void) { int ch; struct termios old; struct termios new; tcgetattr(0, &old); new = old; new.c_lflag &= ~(ICANON|ECHO); new.c_cc[VMIN] = 1; new.c_cc[VTIME] = 0; tcsetattr(0, TCSAFLUSH, &new); ch = get..
[Linux] linux에서 getch() 및 kbhit() 사용하기 Linux에서는 함수 getch() 및 함수 kbhit()가 존재하긴 한다. 헤더파일도 conio.h로 주어지고 있고... 문제는 일반 컴파일러가 아니라 보드용 컴파일러, 즉 PC 환경이 아니라 임베디드 환경에서 작업할 때는 위의 헤더인 conio.h가 거의 주어지지 않는다. 따라서 getch() 및 kbhit() 를 사용하기 위해서는 직접 만들어 써야 한다는 어려움이 있다. 그래서 여기에 이와 동일한 작업을 하는 함수를 만들어 본다. 1. linux_kbhit.h 헤더 파일 #ifndef LINUX_KBHIT_H_ #define LINUX_KBHIT_H_ #include #include #include int linux_kbhit(void) { struct termios oldt, newt; int c..
[Linux] Serial-Programming 2. 시작하기 2.1 디버깅 코드를 디버깅하는 가장 좋은 방법은 또 하나의 리눅스 박스를 셋업하고 두 리눅스 박스를 null-modem 케이블로 연결하는 것이다. Miniterm 프로그램을 이용하여 문자들을 전송해보라. Miniterm은 컴파일하기도 쉽고, 키보드에서 입력되는 문자들(특수문자 포함)을 시리얼 포트로 전송할 수 있다. 컴파일할 때 체크해야 할 것은 #define MODEMDEVICE "/dev/ttyS0" 문장이 제대로 설정되어 있는가 하는 것이다. COM1으로 맞추려면 /dev/ttyS0, COM2로 하려면 /dev/ttyS1으로 수정한다. 테스팅을 할 때 가장 중요한 것은 문자가 시리얼 포트로 출력될 때 데이터가 출력 데이터 처리(output processing)을 하지 않고 그대로(r..
Linux] NCURSES란 ? NCURSES란 ? 텍스트모드에서 Window, Panel, Menu, Mouse, Color등을 쉽게 사용할 수 있도록 도와주는 라이브러리입니다. curses라이브러리도 거의 같은 역할을 합니다. ncurses는 curses의 새로운 버전입니다.(new curses) NCURSES설치? NCURSES는 LINUX 라이브러리 이며, 현재 최신 버전의 리눅스의 경우 gcc같은 개발프로그램 설치시 자동으로 설치됩니다. NCURSES를 사용하려면? #include //소스파일 안에 추가 컴파일시 gcc 소스파일네임 -lncurses NCURSES FUNCTIONS $설정 및 초기화 관련 함수 ♦initscr() curses모드를 시작한다. curses를 사용하기 위해 반드시 써줘야 한다. ♦endwin() c..
[Linux] NCURSES 프로그래밍 차례 1절. ncurses 는 무엇인가 2절. ncurses 프로그래밍 2.1절. ncurses 기본 이해 2.1.1절. 기본 구성요소 2.1.2절. 함수 이름 규칙 2.2절. 초기화 및 종료 2.3절. 색상(Color) 2.4절. 화면 업데이트 2.5절. 윈도우(Window) 2.5.1절. 윈도우 생성,이동,삭제 2.5.2절. 윈도우주위에 테두리 만들기 2.6절. 키보드 제어 2.6.1절. Function Keys 2.6.2절. 방향키및 특수키들 2.7절. 문자출력 2.7.1절. 형식화된 문자열 출력 2.7.2절. 문자/개행 출력 2.7.3절. 문자/개행 삭제 2.7.4절. Boxes 와 Line출력 2.8절. 입력 2.8.1절. 문자 / 문자열 입력 2.8.2절. 형식화된 입력 3절. 간단한 예제 1..