본문 바로가기

분류 전체보기

(872)
libuv - uv_pipe_open 에러 : EINVAL 아래 코드는 파일을 열어서, 파이프로 만드는 간단한 예제이다.https://github.com/nikhilm/uvbook/blob/master/code/uvtee/main.c 를 참고했다. (거의 같다.) 그런데 아래 콘솔처럼 EINVAL이 떨어진다.디버그를 해보니 아래 처럼 호출 스택이 이어지고 uv_set_pipe_handle에 이른다. 이 함수에서 SetNamedPipeHandleState라는 윈도우 API를 호출하는데 에러가 발생하는 것이다.
libuv 계층도 libuv를 이용해서 개발을 할 때 문제는 레퍼런스가 별로 없다는 것이다.MSDN같이 잘 정리되어 있는 API 문서가 있으면 좋겠지만, 그나마 괜찮은 문서는 An Introduction to libuv인데 버전이 좀 되다보니 안맞는게 많다. 이 문서조차도 공식 API 문서는 uv.h 파일이라는 말을 하고 있다. tcp 서버를 만들고 있는데 accept가 되면 uv_tcp_t로 init을 하고 uv_stream_t 로 캐스팅을 한다. 소스를 보았더니 아래와 같은 계층 구조를 가지고 있었다.
libuv가 많이 바뀌었다. 객체지향에서 인터페이스 부분(public 필드나 메서드)은 바뀌면 사용하는 부분도 수정을 해주어야 한다.C의 경우에는 함수의 프로토타입이 그런 영역이 될 것이다. libuv에 대한 메뉴얼이 별도로 없어서 An Introduction to libuv와 libuv 소스코드를 참고해서 짜다보니 현재 버전과 많이 다르다는 것을 느끼고 있다. 이 메뉴얼은 0.10.2 기준으로 되어 있고 나는 0.11.24 버전이다 (uv-version.h에 적혀있다) uv_last_errorWin32의 GetLastError()와 유사하다.이 함수는 함수 모양이 바뀐 것이 아니라 아예 없어졌다.예제를 보면 uv_err_name(uv_last_error(loop)) 식으로 사용을 한다. 참고로 loop는 uv_loop_t 포인터 ..
해쉬(hash) - dropbox로 살펴보는 해쉬함수에 대해 이해를 쉽게 할 수 있는 글을 발견했다. (Link)이미지였는데 사실 위키백과에 있던 것이었다. https://en.wikipedia.org/wiki/File:Cryptographic_Hash_Function.svg
Daemon & 패키징 & 로그 윈도우 서비스 프로그램은 만들어본 적이 있지만 유닉스용 데몬은 처음이라 살펴보았다. 처음에는 윈도우 서비스 뼈대처럼 생각을 했는데, 의외로 프로그램 코드는 간단했다.Service Functions: http://msdn.microsoft.com/en-us/library/windows/desktop/ms685942(v=vs.85).aspx윈도우의 서비스 애플리케이션은 ServiceMain 이라는 프로토타입이 정해져 있다.따라서 아래와 같은 뼈대가 만들어진다. (출처: Writing a Service Program's main Function)void __cdecl _tmain(int argc, TCHAR *argv[]) { SERVICE_TABLE_ENTRY DispatchTable[] = { { SVCN..
UNIX Custom Application Migration Guide 요즘 크로스 플랫폼 개발할 일이 생겼는데,관련 자료를 정리해본다. 책C++를 이용한 크로스 플랫폼 개발 Syd Logan (김석중 옮김) 정보문화사 PDF로 된 책도 받을 수 있다. http://www.microsoft.com/en-us/download/details.aspx?id=6904
Office 파일 버전관리 혹은 비교 SCM(CVS, SVN, git, hg..) 등은 텍스트 파일에 대한 버전 관리를 한다.하지만 오피스 파일은 바이너리 화이라 SCM에 넣는다고 해도 diff를 사용하기가 어렵다. 또한 바이너리는 SCM 프로그램이 증분된 부분만 업데이트하기 어렵기 때문에 커밋을 할 때마다 용랑이 곱절이 되기 일 수 이다.부가적인 설명을 하자면abcd라는 내용이 기존에 커밋이 되어 있고abcde라는 내용을 추가하면 SCM에는 +e에 대한 데이터만 추가적으로 저장하는 것이 보통이다.따라서, abcd + abcde = 9의 크기(언제까지나 이것은 절대적인 값이 아니다)가 아닌 abcde+알파의 데이터의 저장비용이 드는 것이다. 용량문제야 그렇다고 해도, 어떤 부분이 변화되었는지 알 수 있는 것은 SCM이 제공하는 장점중에 하나..
An Introduction to libuv 주소: http://nikhilm.github.io/uvbook/ 우선 예제를 돌리기 전에 git으로 소스코드를 빌드해서 시스템에 설치를 한다.자세한 내용은 전에 포스팅한 libuv를 참고아래 명령처럼 libuv.a 파일이 /usr/local/lib/에 있어야 한다.$ ls /usr/local/lib/libuv.a/usr/local/lib/libuv.a 첫 번째 예제 - http://nikhilm.github.io/uvbook/basics.html#hello-world소스코드#include #include int main() { uv_loop_t *loop = uv_loop_new(); printf("Now quitting.\n"); uv_run(loop, UV_RUN_DEFAULT); return 0;..