WSL 사용하기
WSL: Windows Subsystem Linux
WSL은 Linux용 Windows 하위시스템이라고 번역되겠다. 이름부터 뭔가 가슴이 웅장해진다. 문서를 읽어보니 생각만해도 눈물이 난다. 가상머신을 이용하지 않고도 Windows에서 Linux 명령어나 실행파일을 이용할 수 있단다.
WSL1
초창기 WSL1은 Linux 커널을 직접 사용하진 않고 윈도우 NT 커널 내부의 ‘Pico Provider’를 사용하는데, NT API 콜과 Linux 시스템 콜 간 변환을 해주는 일종의 에뮬레이터 같은 역할을 한다. ELF 실행파일 역시 NT Process가 아닌 독립된 Pico Process container에서 실행...
VS Code Build Automation
0. Prologue
“컴퓨터가 좋으면 프로그래밍 언어를 배워보면 어때. C언어 같은거”
아버지가 툭 던진 한마디에 아무것도 모르는 체로 무작정 C언어를 공부해야겠다고 마음먹었다. 초등학교 6학년 때였나.
그렇게 그냥 눈에 띄는 아무 책 하나 사서 저자가 시키는 대로 따라하기 시작했다.
다들 그렇듯, 필자의 첫 IDE는 Visual Studio 2010이었다.
그때 비트연산을 보면서 ‘이런 건 왜 하는 거야’라고 생각하고, 포인터를 보고서 ‘얘는 어디다 써먹지’ 하다가 결국 중간에 접었던 걸로 기억한다. 서술된 설명도 잘 이해하고 문제도 곧 잘 이해했으나 무슨 의미가 있는지를 이해하지 못했고, 목표의식도 없었...
[Bitmap Project] Low Bit Supports & Restructuring
Low Bit Supports & Restructuring
그만 하기로 했었는데… 결국 또 일을 저질러버렸다. 전날 써 놓고 만족한 코드는 꼭 다음날 보면 마음에 들지 않는다. 그럼 다시 뒤엎으면서 저질스러운 실력과 근시안적 사고를 후회한다.
어쩌다 또 코딩도장에서 구조체 내에서 비트단위 접근이 가능한 변수를 만들어 비트필드 사용을 용이하게 한다는 내용을 읽었다.
그동안 16bit 비트맵을 읽기위해 떡칠한 매크로 함수는 뭘까. 삽질
역시 한번 공부할때는 제대로 공부해야한다는 생각을 다시금 한다.
부끄럽게도 C언어를 오랫동안 보아왔으나, 접할때마다 이러는 듯하다. 처음 C를 배울때는 비트연산 저건...
[Bitmap Project] File & Directory Validation
1. File & Directory Validation의 필요성
지난 포스팅을 통해 Command Line Argument로 옵션과 파일 이름등을 받을 수 있도록 설정했다. 하지만 코드를 눈여겨 봤다면 알겠지만 파일이름이 아니라 정확히는 실행파일의 경로이다.
relative path(상대경로)로 표현한 경우 파일 이름만 떡하니 있고 파일 경로가 드러나지 않았을 뿐이다. 상대 경로인 경우에도 bmputill와 같은 폴더에 있지 않은 경우, 폴더 이름들이 쭉 나오게 되고, absolute path(절대 경로)의 경우는 당연히 모든 경로가 적나라하게 드러난다.
실행파일과 다른 경로의 파일에 접근하기 시작할 ...
[Bitmap Project] Command Line Argument
이제 끝이다! 물론 나중에 다른 업데이트를 할 수는 있겠지만 우선 여기까지가 처음 프로젝트를 계획했을때 구상한 가장 마지막 단계이다. 이번엔 main함수를 이쁘게 다듬어보자. 사용자가 쓸 수 있도록.
1. Main Function with Argument
편하다는 이유로 비표준임에도 불구하고 void main(void)를 쓰는 사람들이 꽤 있다. int main을 쓰더라도 main함수의 argument를 쓰는 일이 드물어져서인지, 편해서인지 많은 사람들이 main함수의 인자는 void로 쓴다. GUI가 대중화되면서 이제는 CLI환경을 보는 일이 드물기 때문일 것이다. 하긴 C나 C++로 만들어도 입출력을 CLI...
[Bitmap Project] Bitmap Library - toASCII
처음 bitmap project를 시작하겠다고 했을 때 원래 계획은 bitmap 파일을 읽어 각 픽셀을 적절한 ASCII 문자와 대응시켜, 멀리서 텍스트파일을 보면 원래 비트맵파일의 그림같다고 느끼게 하는 것이었다. 아래처럼 말이다.
******::**======++++++++++++++++++++++++++++++++++++**********::--++++++++++++==
********++======++++++++++++++++++++++++++++++++++++************--::++++++++==@@
********++======++++++++++++++++++++++++++++++++++++*...
[Bitmap Project] Bitmap Library - Mirror
이번엔 좌우반전을 해보고자 한다. 여기에는 귀여운 앵무새를 예시로 써볼까 한다.
이 귀여운 앵무새들이 mirror라는 함수로 처리된 후 왼쪽을 바라보게 만들 것이다.
1. 뒤집기?
좌우반전이면 결국 왼쪽에 있는게 오른쪽으로 가고 오른쪽에 있는게 왼쪽으로 가야한다.
가장 왼쪽에 있는 픽셀은 같은 높이의 가장 오른쪽에 있는 픽셀로,
가장 오른쪽에 있는 픽셀은 같은 높이의 가장 왼쪽에 있는 픽셀로,
그다음 오른쪽에 있는 픽셀은 같은 높이의 왼쪽에서 두번째 픽셀로,
… 뭐 이렇게 이동 시켜야 하지 않을까.
중앙선 기준 대칭으로 접근해야겠다.
또, 서로 대칭인 픽셀들은 서로 교환되고 있으니 swa...
[Bitmap Project] Bitmap Library - Inversion / Contrast
지난 포스팅에서 GrayScale로 바꿔주는 gray 함수를 구현했었다.
1. 읽기, 쓰기, 탐색 환경 구현
이번에는 색상반전을 시켜주는 invert함수를 구현해보자. 결국 이번에도 색, 각 색 채널의 밝기를 조절하는 문제여서 큰 틀은 gray 함수와 동일하다. 우선 지난번에 구현한 함수들을 좀 참고해보자.
#include "bitmap.h"
void invertLess8(IMAGE* img){
//TODO: processing
return;
}
void invert8(IMAGE* img){
for(RGBQUAD* p=((RGBQUAD*)(img->extra))+(img->bi....
39 post articles, 5 pages.