- 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
목록c언어 (19)
Linux Programmer
C언어 공부법과 책추천마지막 수정일 : 2020-11-16처음 쓴 날짜 : 2015-01-15 이 글은 C언어를 공부할 때 헤메지 않고 국제 표준인 정종(正種) C언어를 배우는데 도움을 주고자 쓰여졌다.그러기 위해 알아야 하는 용어나 기반지식들을 살펴보고, 추천 도서인 KNK, K&R에 대해 소개하겠다. 참고로 여기에서 제시하는 방향이나 책이 올바르고 유일한 진리의 길은 아니다. 이 길은 개인적이고 주관적인 견해가 포함되어있으니 감안하고 보길 바란다2015년을 기준으로 할때, 현대 컴퓨팅 환경에서 C언어의 위치는 거의 바닥에 존재하는 기초 언어이다. 따라서 C언어 뒤에 등장한 프로그래밍 언어들은 C언어의 문법체계를 따라했을 정도로 큰 족적을 남기기도 했다.또한 운영체제(Operating system, 이..
vim quickfix 기능 vim에는 컴파일 에러 메시지를 빠르게 수정할 수 있도록 도와주는 기능이 있습니다. 이를 quickfix라고 부르는데, 개발자들이 좋아하는 기능입니다. vim의 quickfix는 make 명령어와 연동되어 사용되며 :mak 혹은 :mak %< 라고 치면 현재 디렉터리나 편집중인 코드를 빌드하면서 에러메시지를 수집합니다. 아래는 quickfix list의 기능을 보여주는 스크린샷입니다. quickfix command:mak [make argv ] [ make target ] 에러 발생시 해당 라인으로 자동 이동을 해주고 컴파일 에러 메시지를 보여주는 창을 보여줄 수 있습니다. 에러 메시지를 보여주는 창에서 각각의 에러사이를 이동할 수도 있습니다. 손에 잡히는 vim 을 공부하신..
* TCP의 TIME_WAIT는 없애는 방법은 무엇인가? TCP 소켓 네트워크 프로그래밍을 하다 보면 TIME_WAIT 상황에 대한 고민을 하는 시점이 오게 된다. 학부 시절 네트워크 프로그래밍 수업을 듣고 실습실에서 열심히 프로그래밍 해봤다면 학부 때 맞닥뜨리게 되는 경우도 있다. 만일 학생 때 고민하지 않고 넘어갔다면 회사에서 주먹구구식으로 혼동을 일으키는 내용이기도 하다. 그래서 이에 대해 좀 정확한 정보를 전달하고자 이 글을 쓴다. 아래 글은 각종 책과 표준안의 레퍼런스와 실제 코딩으로도 검증했지만, 그래도 혹시 틀린 점이 있다면 개의치 말고 지적해주면 감사하겠다. ^^ TIME_WAIT란 무엇인가? 이 글을 쓰게 된 계기 TIME_WAIT는 당신을 해치지 않는다. 그래도 없애고 싶다면? SO_R..
실무에서 쓰이지 않지만 시험에서만 출제되는 C언어 시험 문제의 세계를 고발(?)하고자 한다. 고발이라고 하면 좀 자극적이긴 하지만 사실 특별한 내용은 아니다. 대부분 C언어 하시는 분들은 예전부터 생각해온 것일지도... 사실 요새 몇몇 기관의 시험문제를 출제, 감수 하면서 현실과 동떨어진 시험의 세계를 느낀 후 적는 글이다. 어떤 시험을 출제하느냐고 묻지는 말았으면 한다. 보안서약상 구체적인 기관이나 정보를 이야기할 수는 없다. 시험 문제 출제를 할 때면 출제를 요구하는 기관에서 과목, 출제 목표, 세부사항 등을 일일히 정해준다. 따라서 누가 문제를 내든지 비슷한 형태가 나올 수 밖에 없다. 예를 들면 다음과 같은 요구 사항이 있다고 치자. 과목 대분류 소분류 세부 사항/출제 목표 C언어 예약어 연산자 ..
* 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)하게 된다. 이 후에 결과 데이터를 특정 위치로 전송하거나 복제하기도 한다. 이런 기본적인 계산 단위가 논리적으로 분기되고 복합적으로 연결된 것이 바로 프로그래밍이 되겠다. 그러나 가장 ..
* 주의: 여기서 설명하는 getline은 C++의 getline 메소드와는 다른 것입니다. 혼동하지 마시기 바랍니다. fscanf는 기본적인 입력 받는 함수로 모든 C언어 기초 책에서 소개되고 있지만 개행 문자(new line)나 공백 처리에 곤란한 부분이 있어서 실무환경에서는 fgets + sscanf 로 대체하여 사용하는 편이다. 하지만 scanf는 여전히 형식화된(formatted) 데이터, 즉 숫자나 문자, 공백으로 띄워진 문자열들을 처리할 때는 편리하다는 장점도 있다. 그렇다고해서 scanf의 여러가지 문제점이 완전 해결되는 것은 아니지만!! * scanf의 문제점 scanf("%c", ...) 로 읽는 경우에는 개행 문자를 사용자 입력으로 처리하기 때문에 문자 입력 후 엔터를 치면 다음번 s..
Advanced 리눅스 시스템 네트워크 프로그래밍 (2nd Edition) 예제 소스 코드 예제 소스 코드 파일 : (2014년 8월 16일 수정판) * 압축을 풀면 하위 디렉토리가 생성됩니다. * 생성된 하위 디렉토리에서 make를 명령하면 하위 모든 예제가 컴파일 됩니다. * make clean을 하면 하위 모든 컴파일된 예제의 바이너리가 청소(삭제)됩니다. 2014-08-1610장 리얼타임 확장 : aio_list.c aio_list_sig.c에서 치명적인 버그가 발견되어 수정되었습니다. 자세한 내용은 정오표에 업데이트 될 것이니 참고하시기 바랍니다. * 2판은 약 200여 페이지가 새로 추가되어 부득이하게 책 무게가 늘었습니다. 또한 기존 내용중에서도 수정, 보완된 것으로 인해 4~50% 정도가 ..
얼마전 스티브 잡스가 눈을 감았는데, 그 보다 더 위대한 업적을 남기신 데니스 리치(Dennis Ritchie)도 눈을 감았다.(향년 71세, 1941년 9월 9일 – 2011년 10월 12일) 일반인들에게는 애플을 창업한 스티브 잡스가 더 위대하고, 더 많이 알려져있겠지만, 업적으로만 보면 스티브 잡스보다 훨씬 훌륭한 분이 바로 데니스 리치이다. (위키 참조: http://en.wikipedia.org/wiki/Dennis_Ritchie) 그의 가장 큰 업적은 많은 사람들이 알고 있는 C언어로서 이것이야말로 현대적인 컴퓨팅 환경을 있게한 프로그래밍 언어의 조상이며 살아있는 전설이다. 만일 C언어가 없었다면 이렇게 발전된 컴퓨팅 환경이 오기 힘들었을 것이다. 지금의 리눅스, 윈도우즈, 맥의 OSX 등등 ..
예전에 위키에 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는 출력 ..
* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.)우선 책에는 애매모호하게 짧게 적어놔서 문의 메일을 여러 차례 받았습니다. 매번 같은 내용을 설명하는 것도 힘들고, 자세히 설명드리지도 못해 죄송한 마음에 미리 적어두고 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다.더보기[책의 원문]* 원자성과 쓰레드 - 안전, 재진입성에 대해서원자성(atomicity)이 보장되는 코드(or 함수)는 일단 해당 코드 부분이 시작하면, 종료되기 전에는 다른 코드 ..
보드 게임이란다. 심심해서 funshop.co.kr에 갔더니 이런 보드 게임이 나와있다. 헐~ 바로 C언어를 모티브로 만든 주사위 게임이다. 게임은 main() 함수로부터 시작되고 if, else, while, goto 등등 여러가지 구문들이 나와있다고 한다. x가 주사위를 돌려서 나온 값이고 그것으로 말이 이동을 하는 게임이다. 단순하긴 하지만 C language의 reserved word를 알아야만 게임을 진행할 수 있을 것 같다. 지르고 싶은 마음이 있긴 하지만 같이 보드게임하고 놀 사람은 없으니... 그냥 접었다.
지인이 어떤 책을 하나 읽어보고 내용이 필드와 비슷한지 아니면 거리가 있는지 평해달라고 했다. 책 제목은 "대한민국에는 소프트웨어가 없다"였다. 이 책의 저자이신 김익환씨는 안철수 바이러스 연구소에 근무했던 컨설턴트로서 꽤 네임밸류가 있는 분이다. 대한민국에는 소프트웨어가 없다 카테고리 경영/경제 지은이 김익환 (미래의창, 2003년) 상세보기 * 책의 포인트 1. 한국의 IT는 사상누각이다. 제대로 된 전문인력이 없기 때문이다. 제대로 된 전문인력이란 언어(영어), 문화(협업), 이론적 지식, 스킬or테크닉이 있어야 한다. 2. 한국은 개발단계와 소프트웨어에 대한 이해가 부족하다. 소프트웨어는 코딩이 중심이 아니다. 한국은 가장 중요한 설계나 준비과정이 보스(관리자)에게 무시당한다. 3. 설계가 간과되..
올해는 이런저런 사건이 많아서 한동안 책을 읽지 못했다. 그러다가 저번달부터 다시 책을 들기 시작했는데 1주일에 2권정도씩 보니 시간이 빠르게 지나간다. 이번에 산 책들중에는 괜찮은 책들이 꽤 많은데 그 중에서 "폰 노이만 vs 아인슈타인"은 정말 괜찮았다. 이런 가벼운 전기형식은 당시 시대상을 이해하는데 꽤 도움이 된다. (양자역학이라는 새로운 관점이 열릴 수 있는 새로운 역사적 무대였다는 점에서 두 천재가 살았던 세상은 현대를 열은 초석이었다) 폰노이만 VS 아인슈타인 카테고리 시/에세이 지은이 김원기 (숨비소리, 2008년) 상세보기 이 책은 그냥 가볍게 읽을 수 있는 전기형식으로서 시대를 풍미한 두 천재에 대해서 적고 있다. 아인슈타인이야 워낙 유명하니 다들 알지만 폰 노이만은 잘 모르는 사람이 ..
-- 수정 중 -- 원래 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;"속성을 주면 된..