본문 바로가기

전체 글

mutt 이메일 클라이언트 사용법 정리 이 글은 필자가 공부하는대로 부족한 부분을 업데이트 하고 있습니다. mutt에 관하여 좋은 내용을 알고계시다면 알려주세요! mutt란 mutt는 터미널에서 사용하는 이메일 클라이언트다. 리눅스 커널은 이메일을 통해 대부분의 토론과 패치로 소통한다. 그러다보니 참여하려면 이메일을 정말 많이 봐야한다. 보통 이메일을 쓸 땐 웹 기반 이메일 서비스를 사용하지만, 리눅스 커널 메일링 리스트처럼 하루에도 수백개의 메일을 수신해야 하는 환경에는 적합하지 않다. 텍스트 기반인 mutt를 애용하자. 패치를 몇개 보내면서 이메일 클라이언트 때문에 삽질을 좀 했다. 인라인 패치가 아니라 첨부파일로 보낸다던가, 어떤 메일에 대한 답장으로 인라인 패치를 보내고 싶은데 방법을 모른다던가.. 그런걸 여기서 글로 정리해보려고 한다.. 더보기
[KNK 정리] 5장: Selection Statements 요약/정리 C언어에는 몇가지의 statements가 있다. 이번 장에서는 selection statements를 다룬다. - selection statements: if / switch 등 조건에 따라 분기하는 구문 - iteration statements: for, while, do-while 등 정해진 동작을 반복하는 구문 - jump statements: 코드를 점프하는 구문 - compound statement: 여러 개의 구문을 하나의 구문으로 만들기 위한 구문 - null statement: 아무 동작도 수행하지 않는 구문 logical expressions 우리는 4장에서 배웠듯 연산자를 통해서 다양한 expression을 만들 수 있다. 하지만 x + y와 같은 expression과 다르게.. 더보기
[KNK 정리] 4장: Expressions 요약/정리 C언어는 다른 언어와 달리 expression을 강조한다. 기본적으로 변수와 상수도 expression에 해당하며, 연산자를 통해서 새로운 expression을 만들 수도 있다. (x + y) * z에서 x, y, z, x + y, (x + y) * z는 모두 expression이라고 할 수 있다. 산술 연산자 (Arithmetic Operators) 단항 연산자 (Unary Operators) 산술 연산자 중 단항 연산자는 +, -가 있다. 이는 expression의 부호를 나타낸다. 예시): +1, -1, +x, -x 이항 연산자 (Binary Operators) + : 두 operand의 합을 구한다. - : 좌측 operand에서 우측 operand를 뺀 값을 구한다. * : 두 ope.. 더보기
[KNK 정리] 2장: C Fundamentals 요약/정리 간단한 C언어 프로그램의 구현 #include /* Standard Input/Output 관련된 함수의 정의를 포함한다 */ /* main 함수: 모든 C 언어 프로그램에 들어가는 필수적인 함수 */ intmain(void) { printf("To C, or not to C: that is the question.\n"); /* 문자열 출력 */ return 0; /* main 함수를 종료한다. 0은 프로그램이 정상적으로 종료됨을 의미한다. */ } 전처리(Preprocess), 컴파일(Compile), 링크(Link) C언어로 프로그램을 만들때 보통 전처리, 컴파일, 링크라는 세 단계를 순서대로 거친다. 전처리 전처리는 컴파일 이전에 #define, #include, #if, #endif와.. 더보기
[KNK 정리] 1장: Introducing C 커널을 보다보니까 C언어를 좀 더 이해하면 좋겠다 싶어서 KNK (C Programming: A Modern Approach)를 읽고 있다. 근데 정리를 안 하니까 자꾸 헷갈려서 요약 + 연습 문제 풀이를 해보려고 한다. 요약/정리 C언어의 역사 C언어는 1970년대 데니스 리치와 켄 톰슨이 당시 벨 연구소에서 진행하던 유닉스 운영체제를 위해 개발된 언어이다. C언어 이전까지만 해도 유닉스는 어셈블리어로 작성되었다. 어셈블리어는 개발도, 디버깅도 번거로울 뿐만 아니라 아키텍처에 의존적이기 때문에 이식성도 좋지 않았다. 그래서 데니스 리치와 켄 톰슨은 좀더 추상적인, 고수준의 언어를 적용하기로 했고, 그렇게 C언어가 탄생하게 되었다. C언어의 표준 컴퓨터공학을 공부하다보면 표준의 부재로 생기는 문제들이 매.. 더보기
공군 전자계산 훈련소 + 특기학교 후기 2달간의 훈련소, 특기학교 기간이 끝났다. 그동안의 과정을 정리해보려고 한다. 왜 전자계산에 지원했나 나는 군대에서 무슨 일을 하든 컴퓨터로 하는 일을 하고 싶었고, 그게 아니면 군대에 가기가 싫었다. 물론 지금 생각해보면 그냥 어디든 개인 시간을 많이 확보할 수 있는 곳으로 가도 좋았겠지 싶긴 하다. 공군 전자계산 지원할 때 사실 난 작년까지 군대에 올 계획이 없었다. 그래서 군대에 지원할 때 조금 불리했다. 그냥 육군으로 지원했으면 큰 상관이 없겠지만, 지정특기로 지원하려면 대학 전공, 자격증 점수가 많이 들어간다. 그래서 원래는 해군 정보보호병으로 지원했다가 자격증 점수가 부족해서 떨어졌고, 그 다음에 공군 전자계산으로 지원했는데 운좋게 비수기라 경쟁이 치열하지 않았다. 만약 전자계산 특기로 지원할.. 더보기
입대 전 생각 정리 최근 2달동안 미친듯이 달렸다. 개인적으로 진행하고 있는 프로젝트가 있는데, 낮에는 팀 프로젝트를 진행하고 집에 와서는 새벽까지 리눅스 커널을 보는 것을 반복했다. 그동안 느낀 것도 있고, 또 입대도 19일 남고 하니 이런저런 생각을 정리해본다. 문서화와 커밋 메시지는 정말 중요하다. 이전까지는 제대로 git을 쓰는 법을 몰랐다. 보통 1 - 3인 정도에서 소규모로 프로젝트를 진행할 때는 카톡 정도로 의사소통 해도 해결이 되었다. 심지어 문서화는 제대로 하지도 않았다. 하지만 커널을 공부하면서, 프로젝트 바깥에서 참여를 하려고 하니 눈앞이 깜깜했다. 문서도 부족하다고 느꼈다. 그리고 패치를 보내다 보니, 리뷰하는 사람이 쉽게 이해할 수 있도록 커밋을 잘게 쪼개고 메시지도 명확하게 남기는 게 중요했다. 프.. 더보기
[Linux Kernel] 문자 디바이스 드라이버 (Blocking IO) 이 글은 가상 파일시스템, 문자 디바이스 드라이버 작성, 세마포어를 어느 정도 이해한다고 가정한다. 이 글에서는 wait queue라는 인터페이스를 소개하고 wait queue로 Blocking IO를 구현하는 방법에 대해 설명할 것이다. Non-blocking IO가 되게 간단하긴 한데 지금 공부하기가 싫으니 다음 번에 Non-blocking IO & Async IO로 같이 글을 써야겠다. Blocking vs Non-blocking IO 일반적으로 우리가 open을 통해서 여는 파일에 작업을 하면, blocking 방식으로 처리하게 된다. blocking IO 파일에 대하여 read를 호출했으나 아직 읽을 내용이 없을 때, write를 했으나 아직 데이터를 버퍼에 쓸 수 없을 때, open을 했으나 .. 더보기