- 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
목록프로그래밍 (18)
Linux Programmer
* 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를 쓰지 않는 편이 좋다. 참고로 ..
벌써 몇 년이 지난 이야기다. 교육을 받던 분이 굳이 C언어를 배워야 할 필요가 있냐고 물어보셨다. 그에 대한 개인적인 생각을 적어보도록 하겠다.(이 글은 컴관련 전공자에 한하여 유효한 이야기이다. 비전공자라면 굳이 꼭 C언어를 배울 필요는 없다. 물론 개인적인 공부 방향이 컴관련 하부구조이거나 혹은 나중에 컴관련 대학원을 진학하려면 C언어 공부는 필수다.) 1. 체계화된 프로그래밍 순서를 익힐 수 있다. 모든 프로그래밍은 기본적으로 연산에 필요한 데이터를 메모리에 적재(load)하고 일련의 계산 결과를 저장(store)하게 된다. 이 후에 결과 데이터를 특정 위치로 전송하거나 복제하기도 한다. 이런 기본적인 계산 단위가 논리적으로 분기되고 복합적으로 연결된 것이 바로 프로그래밍이 되겠다. 그러나 가장 ..
Advanced 리눅스 시스템 네트워크 프로그래밍 (2nd Edition) 예제 소스 코드 예제 소스 코드 파일 : (2014년 8월 16일 수정판) * 압축을 풀면 하위 디렉토리가 생성됩니다. * 생성된 하위 디렉토리에서 make를 명령하면 하위 모든 예제가 컴파일 됩니다. * make clean을 하면 하위 모든 컴파일된 예제의 바이너리가 청소(삭제)됩니다. 2014-08-1610장 리얼타임 확장 : aio_list.c aio_list_sig.c에서 치명적인 버그가 발견되어 수정되었습니다. 자세한 내용은 정오표에 업데이트 될 것이니 참고하시기 바랍니다. * 2판은 약 200여 페이지가 새로 추가되어 부득이하게 책 무게가 늘었습니다. 또한 기존 내용중에서도 수정, 보완된 것으로 인해 4~50% 정도가 ..
예전에 위키에 TS(Thread-Safety) 내용중에 잘못된 내용이 있는 것을 알게되었다. 까맣게 잊고 있다가 누구에게 TSF(Thread-Safe-Function)알려주다가 위키를 참고하라고 했다. 문득 생각이 나서 다시 위키 내용을 보았다. http://en.wikipedia.org/wiki/Thread_safety 위 링크를 가보면 재진입(reentrant)에 대해 잘못 올라와 있는 내용은 삭제되었다. 잘못된 내용이란 재진입은 만족하지만 쓰레드 안전(thread-safety)은 만족하지 않는 코드가 있다고 하는 것이었다. 하지만 실상은 재진입은 쓰레드 안전을 충족하고 나아가 비동기 시그널에서도 제대로 작동하는 더 엄격한 규약을 만족하는 코드를 말한다. 히스토리를 살펴보니 reentrant에 대해 ..
이 글은 2008년도에 개정된 POSIX.1-2008 표준에 추가된 함수, dprintf에 대해 소개하는 글입니다. TOC 1. 형식화된 입출력에서 printf 란? 2. printf와 고수준 파일 처리 3. 새로운 형식화된 출력 dprintf 4. 결론 과거 타자기부터 컴퓨터까지 수 많은 발전 중에 가장 중요한 것중에 하나는 데이터를 정확하고 멋드러지게 출력하는 것이었다. 그러다보니 프로그래밍에서 빠질 없는 것이 바로 형식화된 입출력(Formatted Input/Output)이다. (형식화된 입출력이란 데이터의 형태를 변환하여 읽거나 출력하는 것으로 로케일 변환, 자릿수 맞춤, 들여쓰기(tab) 등등의 기능을 말한다.) 1. 형식화된 입출력에서 printf 란? 형식화된 입출력에서 printf는 출력 ..
* 개요 taglist (http://www.vim.org/scripts/script.php?script_id=273)는 소스 코드를 분석해주는 vim 플러그인입니다. 이 플러그인은 ctags 기능을 사용하므로 시스템에 필히 ctags가 있어야 합니다. 리눅스나 유닉스 계열은 대부분 ctags가 설치되어있는 경우가 많습니다. 따라서 taglist 플러그인을 설치하는 것이 간단하지만, ctags를 사용하지 않는 윈도계열에서는 ctags를 따로 설치해줘야만 합니다. "손에 잡히는 vim"에서는 이에 대한 부분이 언급되어있지 않았기에 따로 적어두도록 하겠습니다. * 윈도에서 ctags 설치 윈도 계열에서 ctags가 없으면 tagList는 그림처럼 "Taglist: Exuberant ctags (http://..
* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.)우선 책에는 애매모호하게 짧게 적어놔서 문의 메일을 여러 차례 받았습니다. 매번 같은 내용을 설명하는 것도 힘들고, 자세히 설명드리지도 못해 죄송한 마음에 미리 적어두고 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다.더보기[책의 원문]* 원자성과 쓰레드 - 안전, 재진입성에 대해서원자성(atomicity)이 보장되는 코드(or 함수)는 일단 해당 코드 부분이 시작하면, 종료되기 전에는 다른 코드 ..
"손에 잡히는 vim" 책 소개는 출판사 블로그(http://blog.insightbook.co.kr/217)를 참고해주세요. 책에서 오탈자나 내용상의 오류를 발견하시면, 여기에 댓글로 남겨주시거나, 메일로 보내주시면 정리해서 올리도록 하겠습니다. * 오탈자 리스트 (마지막 변경 : 2018년 5월 20일) (페이지 17) Note 부분 오류 부분 정정 후 현재 작업 강제 종료 (디버깅용) 현재 작업 강제 종료 (디버깅용) * 참고 : CTRL-Q는 터미널의 스크롤락 정지(CTRL-S)를 resume하는 기능입니다. (페이지 50) 표 3.7 입력 모드 예 부분 오류 부분 정정 후 :help i_ :help i_CTRL-N (페이지 89) 표 5.4 창 분할 명령어 정리의 vnew 부분 (표의 가장 아랫..
이번에 집필을 다시 하면서, 소스코드를 타이핑할 때마다 fixed font가 너무 맘에 들지 않았다. 글꼴이 마음에 안드니까 타이핑 할 때마다 거슬렸다. 그래서 괜찮은 글꼴이 없나 인터넷을 어슬렁 거렸는데... 우연히 네이버 나눔 글꼴중에 "나눔고딕 코딩글꼴 (http://dev.naver.com/projects/nanumfont/)이 있어서 한 번 써봤다. 약간 폭이 좁아서 글꼴이 세련되게 뻗어있지만 fixed font라서 indentation이 딱딱 맞는다. 아주 좋다. 그리고 글꼴 개발자들이 코딩의 어려움중 하나인 숫자 1과 소문자 L의 차이, 영문 소문자 i의 가독성을 신경써서 만들어서 눈에 확 들어온다. 그래서 앞으로 이 글꼴을 쓰기로 결정!!! 다운로드는 여기로 : http://dev.nave..
어떤 프로그래머가 프리젠테이션하면서 다음과 같은 말을 하였다. 이 말의 속뜻은? "제 업무에 대해서 다각도로 접근하면서, 실험결과가 대단히 만족스러워서 소비자의 만족을 보장할 수 있었습니다." [해석을 위한] 프로그래머 언어 (출처 : http://kldp.org/node/70713) 1. 다각도에서 접근하고 있으며 - 여태 삽질만 했어. 2. 새로운 접근 방식을 토대로 보고서가 추가 작성되고 있습니다 - 대졸 신참 세 명 고용했어. 3. 공동 작업 프로젝트를 마치는 - 누구한테 덤터기 씌워야 될지 알거든. 4. 현저한 기술적 약진 - 그냥저냥 돌아가는데, 겉보기엔 막 최첨단 같다. 5. 소비자의 만족을 보장 - 스케줄 다 어그러졌으니, 완성되면 구매자는 '드디어' 하고 감격하지 않을까. 6. 초기 단계..
TOC 1. 이 책의 주제는... 2. 이 책을 읽어야 할 사람은... 3. 이 책의 내용은... 4. 왜 멀티코어 혁명이라고 부를까? 조지아텍에서 공부하고 있던 김민장님(http://minjang.egloos.com/)이 책을 출간했습니다. 이미 블로그에 올린 글들과 주제들에 살을 보태서 에세이 형식의 책으로 낸 것이죠. 그리고 고맙게도 김민장님이 증정본을 보내줘서 잘 읽어봤습니다. 멀티코어CPU이야기 카테고리 컴퓨터/IT > 컴퓨터공학 > 컴퓨터구조 지은이 김민장 (한빛미디어, 2010년) 상세보기 1. 이 책의 주제는... 우선 이 책은 프로그래밍 문법이나 활용에 대한 내용을 담고 있는 책은 아닙니다. 문법에 대한 내용은 나오지도 않고, 설명하지도 않습니다. 코드도 거의 없습니다. 대부분 설명만 있..
*TCP auto tuning 네트워크 라인 속도가 충분히 빠르다면 TCP 소켓의 버퍼가 클수록 전송속도에서 유리해진다. 그러나 프로그래머가 일일히 네트워크 라인 속도를 체크하여 소켓 버퍼를 조정하도록 프로그래밍 하는 것은 매우 귀찮은 일이다. 따라서 리눅스나 최근 운영체제들은 운영체제에서 전송속도를 감지하여 자동으로 소켓 버퍼의 크기를 늘려주거나 반대로 줄여주어 쓸데없는 메모리 낭비를 막아주는 기능이 도입되었다. 리눅스에서는 이를 TCP auto tuning이라고 하며 Linux 2.4.16 or 2.6.8 이후부터 제공되었다. TCP auto tuning의 리눅스 커널 설정 항목 값 설명 net.ipv4.tcp_moderate_rcvbuf boolean : 0=off, 1=on 수신버퍼에 TCP au..
지인이 어떤 책을 하나 읽어보고 내용이 필드와 비슷한지 아니면 거리가 있는지 평해달라고 했다. 책 제목은 "대한민국에는 소프트웨어가 없다"였다. 이 책의 저자이신 김익환씨는 안철수 바이러스 연구소에 근무했던 컨설턴트로서 꽤 네임밸류가 있는 분이다. 대한민국에는 소프트웨어가 없다 카테고리 경영/경제 지은이 김익환 (미래의창, 2003년) 상세보기 * 책의 포인트 1. 한국의 IT는 사상누각이다. 제대로 된 전문인력이 없기 때문이다. 제대로 된 전문인력이란 언어(영어), 문화(협업), 이론적 지식, 스킬or테크닉이 있어야 한다. 2. 한국은 개발단계와 소프트웨어에 대한 이해가 부족하다. 소프트웨어는 코딩이 중심이 아니다. 한국은 가장 중요한 설계나 준비과정이 보스(관리자)에게 무시당한다. 3. 설계가 간과되..
-- 수정 중 -- 원래 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;"속성을 주면 된..