본문 바로가기
728x90

전체 글99

C언어에서 bool type 사용법 일반적으로 C언어에서는 primitive로 bool type을 지원하지 않는 것으로 알고 있다. 하지만, C99 표준에 의하면, C에서도 bool type을 지원하고, stdbool.h에 bool type이 포함되어 있다. stdbool.h를 보면, #define bool _Bool 로 정의되어 있다. 실제로 gcc에서 stdbool.h를 include 시키지 않더라도, _Bool을 사용하면 된다. 실제 primitive는 _BOOL인 것이다. 하지만 일반적으로, C++과의 호환을 위해 stdbool.h를 include한 후, 사용한다. 사실 아직도 오래된 코드들을 보면, typedef unsigned char BOOL 과 같은 형태로 구현된 것을 많이 볼 수 있다. 리눅스 6.2를 기준으로, stdbo.. 2013. 9. 11.
투수 규정이닝 및 야수 규정 타석 야구에서는 투수의 방어율 순위 결정, 야수 중 타율 1위를 결정하기 위해, 규정 이닝 규정 타석 수 라는 규칙이 있다. 이런 규칙이 왜 있을까? 만약 이런 규칙이 없다면, 투수의 경우, 단 1이닝 투구만 하고 무실점하면 방어율 1위가 되고, 야수의 경우, 단 한 타석에만 들어서 안타를 치면 타율 1위가 되는 웃지 못할 상황이 생길 수 있을 것이다. 아마 방어율 1위와 타율 1위가 수십 명이 되는 사 태가 생길 수도 있을 것이다. ^^ 이를 방지하기 위해, 규정 이닝, 규정 타석수라는 규칙이 있다. 먼저 규정이닝은 소속팀의 경기수 이다. 이건 KBO 나 MLB 모두 마찬가지인 거 같다. MLB는 162이닝, KBO는 133이닝이다. 다음으로 규정 타석 수는, 소속팀 경기수 * 3.1 이다. 이것도 한국, .. 2013. 9. 5.
방어율 (ERA) 계산법 방어율, 영어로는 ERA (Earned Run Average), 투수의 능력을 측정하는 가장 중요한 척도라고 할 수 있다. 방어율의 뜻은 9이닝 당 실점 수이다. 가령 한 경기에서 9이닝 완투를 하고 1실점을 했다면 1.0, 2실점을 하면, 2.0 그런 식이다. 방어율이 1점대만 되도 외계인 소리를 듯는 거 보면 투수가 정말 어렵긴 어려운 모양이다. 위에 설명을 통해 이미 알겠지만, 방어율 계산은 간단한 비례식으로 계산 가능하다. 투구이닝 : 실점 = 9 : x 위의 비례식을 통해, 9이닝당 실점인 x값을 구하면 된다. 이 비례식을 다시 수식으로 변경하면, 방어율 = (실점 * 9) / 투구이닝이 된다. 참 쉽죠잉~~ 2013. 9. 5.
expect를 이용한 자동화(3) - 원격 장비 passwd 변경 expect에 대한 설명은 expect를 이용한 자동화(1) - ssh 를 참조하기 바란다. 여기서는 expect를 이용해서 원격 장비의 passwd를 자동으로 변경하는 쉘을 만들어 보겠다. 서버가 여러 대일 경우, 동시에 passwd변경 시 유용하게 사용할 수 있다. 파일명 passwd.exp 파일 내용 #!/usr/bin/expect proc usage {} { puts "usage: ip_address old_password new_passwd" exit 1 } set argc [llength $argv] if { $argc != 4 } { usage } set timeout -1 set HOST [lindex $argv 0] set USERID [lindex $argv 1] set PASSWD [.. 2013. 9. 3.
expect를 이용한 자동화(2) - scp expect에 대한 설명은 expect를 이용한 자동화(1) - ssh 를 참조하기 바란다. 여기서는 expect를 이용해서 scp의 자동으로 passwd를 입력하고, 원격복사하는 쉘을 만들어 보겠다. 파일명 scp.exp 파일 내용 #!/usr/bin/expect proc usage {} { puts "usage: src target id password" exit 1 } set argc [llength $argv] if { $argc != 4 } { usage } set timeout -1 set SRC_PATH [lindex $argv 0] set TARGET_PATH [lindex $argv 1] set TARGET_ID [lindex $argv 2] set PASSWD [lindex $argv .. 2013. 9. 3.
expect를 이용한 자동화(1) - ssh expect는 리눅스 혹은 유닉스에 있는 script language이다. 일반 쉘을 이용할 경우, ssh, scp, passwd 변경등을 할 때, script로 처리할 수 없고, console창에 interactive하게 입력해야 한다. 이럴 경우에 사용할 수 있는 script language가 expect이다. expect는 화면에 특정 문자열이 왔을 때, 응답으로 어떤 문자열로 응답하는 식의 처리가 가능하다. 이를 이용해 ssh 자동 접속 쉘, scp 접속 쉘, passwd 변경 쉘 등을 만들어 보겠다. expect에 대해서 더 정확한 문법을 알고 싶다면, 다음 URL을 참조하기 바란다. URL : http://search.cpan.org/~rgiersig/Expect-1.21/Expect.pod .. 2013. 9. 3.
multi-thread 환경에서 signal 사용 일반적으로 multi-thread 환경에서는 signal을 잘 사용하지 않지만, 불가피하게 signal을 사용하게 되는 경우가 생길 수 있다. 하지만 signal의 특성상 signal은 특정 process를 지정해서 보내는 것이지 특정 thread로 전달되는 것이 아니기 때문에 process 내의 어떤 thread에서 signal을 받아 처리할지 모른다. 예를 들어 main thread와 thread1, thread2가 있다고 가정하면 main thread에서 signal handler를 지정하더라도, signal handler에서 처리되지 않고, thread1 혹은 thread2로 signal이 전달될 수 있다. 그러므로 이 경우에는 다음 그림과 같은 특별한 처리가 필요하다. 그림에 관해서 간략히 설명.. 2013. 9. 2.
[SOCKET]TCP KEEPALIVE 옵션 설정 TCP의 경우, connection oriented protocol이지만, 송수신 중, 상대방 프로세스가 종료되는 등 정상적인 상황이 아닌 경우에는 세션의 종료 여부를 감지할 수 없다. 단지, 송신 측 TCP 버퍼가 가득 찬 경우에 EAGAIN을 발생시킬 뿐이다. 다시 말해, LAN 케이블이 뽑힌다든지, 기타 비정상적인 종료가 있을 경우, 상대 측에서 감지할 수 없다는 것이다. TCP option 중, SO_KEEPALIVE라는 옵션이 있는데, setsockopt 함수에서 SO_KEEPALIVE를 1로 setting하면 소켓 내부적으로 일정시간 간격으로 heartbeat을 전송하여, 비정상적인 세션 종료에 대해 감지한다. 그런데 SO_KEEPALIVE를 설정할 경우, 시스템에서 설정한 시간 간격으로 세션.. 2013. 8. 29.
728x90