반응형

전체 글 99

[C언어] for loop에서 i++과 ++i는 정말 같을까?

이 글을 쓰게 된 계기C 개발을 오래 하다 보면 다른 사람의 코드를 리뷰하거나 오픈소스를 분석할 일이 많아진다. 그러다 보면 한 가지 미묘한 차이를 발견하게 되는데, 같은 개발자가 작성한 코드임에도 불구하고 어떤 곳에서는 i++을, 또 다른 곳에서는 ++i를 사용하는 경우다. // 어떤 함수에서는for (int i = 0; i 겉보기에는 아무 문제없어 보이지만 이걸 보는 순간 “여기서 일부러 ++i를 쓴 이유가 있나?” 하고 멈추게 된다. i++과 ++i는 분명 다른 동작인데, for 루프에서도 정말 차이가 있는 걸까?그래서 직접 어셈블리까지 뽑아보면서 확인해 봤다. i++과 ++i의 차이우선 기본적인 차이부터 짚고 넘어가자.i++ 은 현재 값을 먼저 돌려준 다음에 i를 1 증가시킨다.++i 는 i를 ..

[C언어] localtime 함수 (타임스탬프를 년/월/일 로 변환) | 왜 1900을 더할까?

사용범위Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수기능1970년 1월 1일 이후로 흐른 초(Second) 단위의 시간값(time_t)을 입력받아, 현재 시스템의 로컬 시간대(Local Timezone)를 기준으로 년, 월, 일, 시, 분, 초 정보가 담긴 구조체(struct tm)의 포인터로 변환하여 반환한다.헤더#include ※ 함수 사용 시 time.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※함수struct tm *localtime(const time_t *timer);파라미터 *const time_t timer time 함수 등을 통해 얻은 time_t 시간값의 주소(포인터). 반환값 성공 시 변환된 날짜/시간 정..

[C언어] snprintf 함수 (버퍼 오버플로우 없는 안전한 문자열 포맷팅)

사용범위Windows, Unix, Linux 등 C99 표준을 지원하는 모든 컴파일러 환경에서 사용 가능한 표준 API. (Visual Studio 구버전의 경우 _snprintf로 호환 가능)기능C언어 표준 함수로, 지정된 버퍼 크기(n)만큼만 형식화된 문자열을 저장한다. 원본 데이터가 버퍼보다 길어도 메모리를 침범하지 않고 지정된 크기만큼만 자르고(Truncation), 마지막에 NULL 문자를 보장하여 안전성을 확보한다.헤더#include ※ snprintf 함수 사용 시 stdio.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※함수int snprintf(char *str, size_t size, const char *format, ...); 파라미터*char str포맷팅 된 ..

[Jetbrains] com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "docker.exe" 문제 해결

[문제 상황]Goland 2024.2.4 버전에서 다음 버전(2025.1)으로 업데이트를 진행하였는데 잘 사용 중이던 원격지 Docker 연결이 안 되는 이슈가 발생하였다. Settings > Build, Execution, Deployment > Docker 에 확인하면 아래와 같은 에러가 발생하고 있는 것을 확인할 수 있었다. [분석] 폭풍 구글링과 이전 버전과의 diff를 통해 기존에 Docker 실행 파일을 설정하던 게 사라지고 Docker 탭의 Detect executable paths automatically 로 통합되어서 발생한 이슈라는 것을 알아내었다. 위의 Detect executable paths automatically를 체크해제하고 docker.exe와 docker-compos..

[kubernetes] wsl + kind를 사용한 k8s 설치 및 관리하기

들어가기에 앞서 포스팅 제목에도 나와있지만 이 글은 Windows의 WSL 환경에 Docker를 설치가 되어있어야 한다. 만약 WSL과 Docker가 준비되지 않았다면 아래 포스팅을 참고하여 WSL과 Docker를 설치하고 와야 한다. WSL 간단 설치 방법 [Windows] 단일 명령 한줄로 WSL2 + Ubuntu 통합 설치하기WSL(Windows Subsystem for Linux) 은 Windows 컴퓨터에서 동시에 Windows 와 Linux 를 사용할 수 있는 기능이다. 공식적으로는 WSL 을 사용하여 Linux 배포판(Ubuntu, OpenSUSE, Kali, Debian, Arch Linux 등) 을 설치할 수 있으hackerpark.tistory.com WSL 환경에 Docker(무료) ..

[Kubernetes] 쿠버네티스 구축 총 정리 (containerd)

설치 환경 및 버전Rocky Linux 9.4, 9.2, 8.8kubernetes v1.30containerd 1.7.23runc 1.2.0CNI-Plugins v1.6.0  들어가기에 앞서  Containerd가 아닌 cri-o 런타임을 설치과정은 아래 포스팅을 참고하기 바랍니다.https://hackerpark.tistory.com/entry/kubernetes-control-planemaster-node-%EC%84%A4%EC%B9%98-%EA%B3%BC%EC%A0%95cri-o [kubernetes] control-plane(master) node 설치 과정(cri-o)설치 환경 및 버전 Rocky Linux 9.3 Linux 5.14 el9 x86_64 kubernetes v1.29.2 cri-..

[golang] WSL Docker와 연동하여 Application 개발하기

들어가기에 앞서본 포스팅은 Jetbrains의 GoLand라는 개발툴을 사용합니다.VSCode 또는 기타 개발 IDE를 사용하는 환경에는 본 포스팅의 내용과 일치하지 않을 수 있습니다.  준비물1. Goland 설치2. WSL 설치3. WSL에 Docker 설치 위의 환경이 준비되어있지 않다면 아래 포스팅을 참고. Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH) [GO언어] Go 환경 변수 및 버전 관리하기 (GOROOT, GOPATH)[이 포스팅은 Windows 환경을 기준으로 작성하였습니다.] GoLand 설치 이후 개발을 진행하던 도중 환경변수가 꼬이는 탓에 엄청난 삽질을 하고 결국 싹 밀고 다시 정리해서 해결하였다. 이 글을 통해hackerpark.tistory.com WSL 간단..

[Docker] WSL에서 Docker 설치하기 (Docker Desktop 아님)

들어가기에 앞서 현재 Windows 환경에 WSL이 설치되어있지 않다면 아래 포스팅을 참고하기 바랍니다.WSL 간단 설치 방법 [Windows] 단일 명령 한줄로 WSL2 + Ubuntu 통합 설치하기WSL(Windows Subsystem for Linux) 은 Windows 컴퓨터에서 동시에 Windows 와 Linux 를 사용할 수 있는 기능이다. 공식적으로는 WSL 을 사용하여 Linux 배포판(Ubuntu, OpenSUSE, Kali, Debian, Arch Linux 등) 을 설치할 수 있으hackerpark.tistory.com  WSL을 설치했다면 Linux의 꽃(?) Docker를 설치해봐야 한다. 당연히 WSL도 Windows 환경이니까 Docker Desktop을 설치하려는 생각을 가질..

[C언어] AIX 서버에서 char 타입 사용 시 반드시 주의할 점

C 개발을 하다 보면 char 타입의 변수로 return 값을 받을 일이 생긴다. 예를 들면 아래와 같은 코드다.#include char testFunction() { char ret; ... if(err > 0) { return -1; } return ret;}int main() { char a; a = testFunction(); if(a == -1) { printf("Error !!\n"); } return 0;} 겉보기에는 아무 문제없어 보이지만 AIX 서버에서 위의 코드를 실행하면 엄청난 문제가 발생한다. C는 기본으로 변수 타입을 선언하면 signed로 선언이 되며 이는 생략가능하다고 본능적(?)으로 알고 있을 것이다. 하지만 AIX 서버는 char 타입에 대해..

[Golang] go binary 실행시 /lib64/libc.so.6: version `GLIBC_2.XX' not found 에러 해결 방법

[환경]golang:1.xx 이미지를 통해 container에서 golang 빌드golang binary를 rocky 또는 기타 linux에서 실행 [개요]  예전 버전의 Golang 이미지를 사용해서 빌드할 때는 문제가 없었는데, 1.19였나 1.20 버전 이상부터 빌드된 binary를 실행하면 아래의 에러가 발생하였다. (이 글을 쓰고 있는 현재는 1.22 버전을 사용 중이다.) /lib64/libc.so.6: version `GLIBC_2.XX' not found 당시에는 원인도 모르고 급하게 해결하였으나, 최근 급하게 해결한 방법이 먹히질 않는 상황이 발생하였고 다시 한번 이런저런 삽질을 하다가 해결했는데 이를 기록해놓으려고 한다. [원인] golang을 빌드할 때 기본으로 들어가는 옵션값들이 상..

반응형