- 0x0000007b
- 2차세계대전
- 3.20해킹
- 4대강
- 502 error
- 53빌딩
- 7840hs
- 88체육관 수영장
- ABI
- abortive close
- abortive shutdown
- AHCI
- akmods
- ALC1220
- alma linux
- alternatives
- AM4 메인보드
- AMD
- amd 7840hs
- amd 그래픽 게임용
- amd 내장 그래픽 최적화
- anonymous file
- API
- apple.com
- APT
- apt-get
- Armagnac
- Asrock
- ASTALIFT
- audacious player
- Today / Yesterday
- /
- Total
목록컴퓨터 관련/프로그래밍 일반 (10)
Linux Programmer
google에서 "TCP 우아한 종료"라고 검색해보자. 상당히 많은 내용이 나온다. 그러나 틀린 이야기들이 대부분이다. 문제는 이 틀린 이야기가 상당히 오랫동안 인터넷을 어지럽히고 많은 학생이나 개발자들에게 혼동을 준다는 점이다.본인은 부업으로 그룹의 IT계열 회사나 금융권에 특강을 다닌다. 대상은 적어도 시니어급 이상의 개발자, 서버 관리자들이 대부분이다. 그런데 강의를 다니다보면 시니어급 개발자(프로그래머)들의 레벨에서도 잘못 알고 있는 지식이 많음을 느낄 수 있었다. 특히 잘못된 교재로 공부한 경우나 잘못 번역된 책으로 공부한 경우에는 특히 심했다.사실 이 글을 쓰게 된 계기는 어제(20/02/01) IT관련 교육자들이 모이는 meetup으로 잠실의 '우아한 형제들 작은 집'에 갔다가 "(어떤 책이..
dart 코드 실행시 Invalid UTF8 sequence encountered, (Error Code: .... 이런 메시지가 발생했다. 원인은 Windows 10에서 작성된 dart code를 받아서 linux로 올렸는데, dart file이 EUC-KR로 인코딩되어있어서 UTF-8을 사용하는 리눅스 시스템에서 인코딩 에러가 발생한 것이다.
* TCP의 TIME_WAIT는 없애는 방법은 무엇인가? TCP 소켓 네트워크 프로그래밍을 하다 보면 TIME_WAIT 상황에 대한 고민을 하는 시점이 오게 된다. 학부 시절 네트워크 프로그래밍 수업을 듣고 실습실에서 열심히 프로그래밍 해봤다면 학부 때 맞닥뜨리게 되는 경우도 있다. 만일 학생 때 고민하지 않고 넘어갔다면 회사에서 주먹구구식으로 혼동을 일으키는 내용이기도 하다. 그래서 이에 대해 좀 정확한 정보를 전달하고자 이 글을 쓴다. 아래 글은 각종 책과 표준안의 레퍼런스와 실제 코딩으로도 검증했지만, 그래도 혹시 틀린 점이 있다면 개의치 말고 지적해주면 감사하겠다. ^^ TIME_WAIT란 무엇인가? 이 글을 쓰게 된 계기 TIME_WAIT는 당신을 해치지 않는다. 그래도 없애고 싶다면? SO_R..
* TOC부모와 자식 프로세스의 관계fork와 fork-execvfork와 문제점posix_spawn의 등장2줄 결론 fork란?fork는 유닉스/리눅스 계열에서 새로운 프로세스를 만드는 표준 함수이다. 그런데 fork는 새로운 프로세스를 만들 때 기존 프로세스를 복제하는 방식을 사용한다. 이 때 원본 프로세스를 부모 프로세스(parent process)라고 부르고 새로 복제된 프로세스를 자식 프로세스(child process)라고 부른다. 1. 부모와 자식 프로세스의 관계현실 세계에서 부모와 자식은 끊을 수 없는 강한 연결점이 있지만, 유닉스 계열의 부모와 자식 프로세스는 그런 것과는 상관이 없이 이름이 지어졌다. 그냥 유전자가 복제되듯이 정적 자원 만을 복제하는 것이라고 생각하면 된다.정적 자원에는 ..
리눅스나 유닉스에서 사용되는 메시지큐는 XSI와 POSIX 두가지 방식이 있다. 이 두 메시지큐의 모델과 프로그래밍 방식에 대해 간략하게 살펴보자. 1. 유닉스 표준과 IPC 현재 유닉스 계열(리눅스 포함)은 OpenGroup의 SUS(Single UNIX Specification) 표준을 따르고 있다. SUS는 기존에 나왔던 유닉스 계열의 다양한 표준인 POSIX, SVR4(SysV Release4), BSD 등의 표준을 통합했기 때문에 같은 기능이 중복된 경우가 꽤 있다. 그 중에서도 IPC(Inter-Process Communication) 기법이 대표적이다. IPC는 좁은 의미로는 세마포어, 공유메모리, 메시지큐를 다루고 넓은 의미로는 파일, 소켓, 메모리맵 등을 포함한다. 하지만 일반적으로 IP..
TCP/IP 소켓 프로그래밍을 하다보면 초보자는 물론이고 중급이상의 숙련된 프로그래머도 실수하는 경우가 많다. 초급자는 경험이 없어서 실수하고, 중급자는 까먹어서 실수한다. 최근에는 미들웨어나 각종 통신 관련 라이브러리가 많아서 직접 TCP/IP 소켓 프로그래밍을 하는 경우는 줄어들고 있지만, 그렇다고 아예 없어지는 것은 아니니 주의할 점을 한 번 정도는 읽어두면 좋다. * 목차 1. TCP 소켓의 연결 종료가 감지되면 꼭 close를 해야만 한다. 2. SIGPIPE 시그널 처리 3. 재전송 1. TCP 소켓의 연결 종료가 감지되면 꼭 close를 해야만 한다. TCP 소켓은 1:1 스트림 연결이기 때문에 상대편이 소켓 연결을 종료하면 이쪽도 같이 종료해야 한다. 자동으로 닫히는 것이 아니므로 꼭 닫아..
gettimeofday는 유닉스, 리눅스 시스템 프로그래밍에서 시간을 구할 때 쓰는 함수이다. 마이크로초(백만분의 1초)단위로 구할 수 있는 기능을 가지고 있어서 많이 사용되는 함수이다.그러나 앞으로 gettimeofday는 지양해야 할 함수가 되었다. 왜냐하면 gettimeofday는 2008년도 유닉스 표준인 SUSv4-2008에서 앞으로 제거될 구식(obsolescent) 함수로 지정했기 때문이다. 물론 하위 호환성을 위해 gettimeofday 함수는 계속 제공될 것이다. 하지만 몇몇 시스템에서는 기본 라이브러리에서 제거되고, 구식 라이브러리를 따로 포함해야 사용할 수 있게 될지도 모르기 때문에 멀티 플랫폼 용으로 개발된다든지 하는 경우라면 gettimeofday를 쓰지 않는 편이 좋다. 참고로 ..
예전에 위키에 TS(Thread-Safety) 내용중에 잘못된 내용이 있는 것을 알게되었다. 까맣게 잊고 있다가 누구에게 TSF(Thread-Safe-Function)알려주다가 위키를 참고하라고 했다. 문득 생각이 나서 다시 위키 내용을 보았다. http://en.wikipedia.org/wiki/Thread_safety 위 링크를 가보면 재진입(reentrant)에 대해 잘못 올라와 있는 내용은 삭제되었다. 잘못된 내용이란 재진입은 만족하지만 쓰레드 안전(thread-safety)은 만족하지 않는 코드가 있다고 하는 것이었다. 하지만 실상은 재진입은 쓰레드 안전을 충족하고 나아가 비동기 시그널에서도 제대로 작동하는 더 엄격한 규약을 만족하는 코드를 말한다. 히스토리를 살펴보니 reentrant에 대해 ..
이번에 집필을 다시 하면서, 소스코드를 타이핑할 때마다 fixed font가 너무 맘에 들지 않았다. 글꼴이 마음에 안드니까 타이핑 할 때마다 거슬렸다. 그래서 괜찮은 글꼴이 없나 인터넷을 어슬렁 거렸는데... 우연히 네이버 나눔 글꼴중에 "나눔고딕 코딩글꼴 (http://dev.naver.com/projects/nanumfont/)이 있어서 한 번 써봤다. 약간 폭이 좁아서 글꼴이 세련되게 뻗어있지만 fixed font라서 indentation이 딱딱 맞는다. 아주 좋다. 그리고 글꼴 개발자들이 코딩의 어려움중 하나인 숫자 1과 소문자 L의 차이, 영문 소문자 i의 가독성을 신경써서 만들어서 눈에 확 들어온다. 그래서 앞으로 이 글꼴을 쓰기로 결정!!! 다운로드는 여기로 : http://dev.nave..
-- 수정 중 -- 원래 http://pupustory.tistory.com/48을 읽고 그대로 따라 하려다가 SyntaxHighlighter의 2.x대의 업데이트 된 버전이 있어서 약간 수정했다. 옛날 버전으로 설치하려는 분들은 여전히 원글대로 하면 된다. 1. SyntaxHighlighter를 다운로드 한다. (아래 링크) http://alexgorbatchev.com/wiki/SyntaxHighlighter 2. 압축을 풀고, scripts와 styles디렉토리의 파일들을 스킨>파일올리기로 올린다. 3. 스킨 메뉴의 HTML/CSS편집을 선택하고, skin.html의 head 부분에 아래 코드를 넣어둔다. 4. 이후에 소스코드는 HTML의 pre 태그에 class="brush: c;"속성을 주면 된..