제임스딘딘의
Tech & Life

개발자의 기록 노트 138

pow( ) - 거듭제곱 함수 구현하기(정수 기반)

개요C언어의 수학 함수 중, 거듭제곱을 구하는 pow( )라는 함수가 있다.예를들어, 2의 10승을 계산하고 싶다면, pow(2.0, 10.0); 형태로 사용하는 함수이다.이 함수는 math.h 헤더를 include하면 사용할 수 있는 함수이다. #include double pow(double x, double y); x : 거듭제곱의 밑수y : 거듭제곱의 지수 그런데 이렇게 거듭제곱을 계산하는 함수를 직접 구현해야 하는 경우가 있었다.매우 큰 수의 거듭제곱을 계산하면서 중간중간에 주어진 특정 값으로 mod 연산(나눗셈 후 나머지 값을 취하여 반환하는 연산)을 해야 하는 알고리즘 풀이 문제였다. 문제 조건 상, pow( )를 직접 사용하면 연산속도가 느려지는 상황이라 직접 구현을 시도해 보았다. my_p..

[네트워크/C reference] Special IPv6 주소 검사 매크로

개요 IPv6 주소 체계에서는 'Special IPv6 addresses' 라고 부르는, 미리 정의된 특별한 주소들이 있다. 미리 정의된 비트 패턴(bit pattern) 으로 각 주소의 역할을 구분한다. 최근들어 C언어로 네트워크 프로그래밍을 하면서 IPv6 주소를 다루게 되는 경우가 발생하곤 하는데, 이 주소가 특정 Special IPv6 address 인지 아닌지를 확인 해야 하는 경우가 있었다. 그래서 조금 찾아보니, 이런 경우 유용하게 사용 할 수 있는 매크로 함수가 C의 표준 라이브러리인 glibc 의 netinet/in.h 헤더에 정의가 되어 있었다. 이번 포스팅에서는 이들 매크로 함수들을 간단히 소개한다. 특수 IPv6 주소(Special IPv6 Address) 검사 매크로 함수IEEE ..

[우분투 16.04] 32bit library를 64 bit 우분투 16.04에 설치하는 방법

개요우분투라는 운영체제는 32 bit CPU용 버전과 64 bit CPU용 버전이 제공된다.그런데 종종, 32bit 용으로 빌드 된 실행파일을 64 bit 용 우분투에서 실행시켜야 하는 경우가 있다.그리고 우분투 12.04 LTS의 64bit 버전에서는 꼼수로써, ia32-libs 라는 패키지를 제공해서, 32bit용 실행파일을 실행 시킬 수 있도록 했었다. 그러나 우분투 16.04 에서는 ia32-libs 패키지가 deprecated 처리가 되었다.그 이유는 MultiArch를 사용하도록 유도하기 위해서 인 듯 싶다. 하지만 방법이 있다.아래와 같은 순서로 MultiArch를 설치하고, 32 bit 용 실행파일을 우분투 16.04 의 64bit 버전 에서 실행되도록 할 수 있다. i386 아키텍쳐 활성..

shell prompt에 git branch 이름 표시 / 색상으로 status 표시

git 기본 사용시 불편한 점여러 소스코드 형상관리 툴 중 git을 주로 사용하는데, linux shell prompt에서 사용하다 보면, 불편한 경우가 있다.아래 두가지 경우였다. 1. 현재 git directory의 branch가 어디인지?2. 현재 git directory의 변경사항이 있는지? 기본 상태에서...1번의 경우는, 'git branch' 라고 명령을 입력해야 확인 가능하다.2번의 경우는 'git status' 라고 명령을 입력해야 확인 가능하다. 이게 은근 귀찮다.그래서 shell prompt에서 git directory로 진입을 하면 branch명을 표시하고, 해당 branch명을 다시 status에 따라 녹색/빨간색으로 표시하도록 하고자 한다. .bashrc 파일 수정 HOME di..

[우분투 16.04] 부팅시 프로그램을 자동으로 시작하도록 설정하는 방법 (How to add auto startup applications in Ubuntu 16.04)

프로그램 자동실행 이유우분투 16.04 이 설치된 PC를 켤때 synergy client를 자동으로 실행되도록 하고 싶다.지금은 우분투 PC가 켜지면, shell prompt를 띄우고, 명령어를 직접 입력해서 synergy client를 실행시켜 synergy server PC에 연결되도록 수동으로 사용하고 있다. 이 과정이 번거롭기 때문에, 자동화 하고자 한다. 참고로 synergy는 서로다른 2대 이상의 PC를 연결시켜서, 한쌍의 키보드와 마우스를 이용해 연결된 PC 모두를 제어하도록 도와주는 프로그램이다.본 포스팅에서 설명하고자 하는 것은, 우분투 16.04 PC가 synergy client가 되고, 그외의 PC (윈도우 혹은 Mac 혹은 또다른 우분투)가 synergy server가 되는 상황이다..

[네트워크/C reference] inet_pton 함수

기능 요약 (Summary)inet_pton( ) 함수는 사람이 알아보기 쉬운 텍스트(human-readable text)형태의 IPv4 와 IPv6 주소를 binary 형태로 변환 하는 기능을 한다. 헤더 (Header files)이 함수를 사용하려면 다음 헤더파일을 포함시킨다. #include API 원형 (API Prototype)3개의 파라미터를 가지는 함수이다. int inet_pton(int af, const char *src, void *dst); af [input] - address family를 지정한다. src의 문자열이 IPv4 주소를 나타내는지, IPv6 주소를 나타내는지를 함수에 알린다.src [input] - 문자열 형태의 IP주소를 넣는다.dst : [output] - src를..

[네트워크/C reference] inet_ntop 함수

기능 요약 (Summary)inet_ntop - IPv4 와 IPv6 주소를 binary 형태에서 사람이 알아보기 쉬운 텍스트(human-readable text)형태로 전환해준다. 헤더 (Header files) #include API 원형 (API Prototype)const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 설명 (Description)이 함수는 네트워크 주소 구조체인 src를 캐릭터 문자열 dst로 변환해주는 함수이다. 네트워크 주소는 IPv4 혹은 IPv6 가 될 수 있으며, 'address family'를 의미하는 af 를 참고하여 src를 해석하게 된다. 결과가 저장되는 dst는 반드시 NULL 포인터가..

TCP Flags: PSH 그리고 URG

개요TCP헤더를 들여다 보면, 1비트 짜리 플래그가 몇개 있다. 1비트로는 0 아니면 1 만을 나타낼 수 있기 때문에, 플래그는 태생적으로 boolean type 이다.이 플래그들은 TCP연결을 통하는 데이터의 흐름을 조절 및 제어 하기 위해 사용된다고 알려져 있다. RFC 3168 에 의해 혼잡 통지(Congestion Notification)을 위해 추가된 CWR 그리고 ECE 플래그를 제외하고나면, 총 6개의 TCP 제어 플래그가 남는다.일단 CWR과 ECE는 논외로 하자. Data Offset 다음을 보면, 6개의 플래그, URG, ACK, PSH, RST, SYN, FIN 이 보인다. 그 중, 아래 4개는 TCP연결의 설정(establish), 유지 관리(management) 및 분리(tear-..

[C][CURL] CURLOPT_FOLLOWLOCATION 의 버전별 동작 차이

C언어로 프로그램을 작성하다보면, HTTP 통신을 해야 할 때가 종종있는데, 이때 개인적으로 선호하는 라이브러리가 있다. 바로 CURL 이다. 라이브러리만을 따로 부를땐 libcurl 이라는 이름으로도 부른다. 이 libcurl을 사용해서 HTTP 처리를 하다보면, 서버가 주는 3xx 응답을 만날때가 있다. 이때 클라이언트는 이에 대한 추가적인 처리 - 변경 혹은 이동된 URL을 따라간다던가 하는 - 를 해야 할 경우가 있다. libcurl은 이때 간단히 사용할 수 있는 옵션을 제공하는데 바로 'CURLOPT_FOLLOWLOCATION' 옵션이다. 우선 HTTP 3xx status에 대해 간단히 살펴보겠다. 300(여러 선택항목): 서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트..

[NMEA-0183] Checksum 계산 예제코드 (How to calculate checksum of NMEA-0183)

본 포스팅에서 다뤄볼 내용은 NMEA-0183 문장의 checksum 계산 방법이다.보통 GPS chip은 해석한 GPS신호를 NMEA라는 특정 형태의 프로토콜로 제공한다.NMEA 가 무엇인지에 대해서 더 자세히 알고싶다면 아래 포스팅을 참고하도록 하자. 2017/08/10 - [하드웨어 Note/GPS 이야기] - [GPS 이야기] NMEA-0183 형식, NMEA Sentence Format 위 포스팅에 나와있듯이, NMEA sentence는 $ 문자로 시작해서 * 문자로 끝난다.checksum의 계산은 $, * 의 사이에 있는 각각의 문자 하나하나를 exclusive-or (XOR) 연산 및 누적하면 된다.어떤 NMEA sentence가 주어졌을 때, "*" 뒤에 있는 16진수 두자리의 checks..