glibc에 래퍼가 없는 리눅스 시스템 콜 — syscall()로 futex_waitv() 호출하기

커널에 새 시스템 콜이 들어와도 glibc에 래퍼 함수가 없으면 C에서 일반 함수처럼 부를 수 없다. 이때는 syscall(SYS_xxx, ...)로 번호와 인자를 직접 넘긴다. 커널 5.16에 들어온 futex_waitv()도 아직 래퍼가 없다. LPC…

Continue Readingglibc에 래퍼가 없는 리눅스 시스템 콜 — syscall()로 futex_waitv() 호출하기

C/C++ 디자인 패턴 (21) — 템플릿 메서드(Template Method)

CSV, JSON, 엑셀에서 데이터를 가져오는 기능은 "읽기 → 걸러내기 → 저장 → 알리기"라는 같은 순서를 따르고, 읽는 방법만 다르다. 형식마다 이 순서를 복사해 두면 단계 하나를 추가할 때 모든 복사본을…

Continue ReadingC/C++ 디자인 패턴 (21) — 템플릿 메서드(Template Method)

C/C++ 디자인 패턴 (17) — 메멘토(Memento)

게임에서 보스 방 앞에 체크포인트를 만들거나, 설정 화면에서 "취소"를 누르면 이전 값으로 돌아가야 한다. 객체 상태를 바깥에서 저장하려면 private 멤버를 공개하거나 getter/setter를 잔뜩 만들어야 하는데, 그러면 캡슐화가 깨지고 저장하는 쪽이…

Continue ReadingC/C++ 디자인 패턴 (17) — 메멘토(Memento)

C/C++ 디자인 패턴 (16) — 중재자(Mediator)

가입 화면에서 "약관 동의"를 체크하고, 이메일이 올바르고, "회사 계정"을 체크했다면 회사명까지 입력해야 가입 버튼이 켜진다. 각 위젯이 서로를 직접 참조해 규칙을 처리하면 체크박스가 버튼과 입력란을 알고, 입력란이 버튼을 알고… 위젯…

Continue ReadingC/C++ 디자인 패턴 (16) — 중재자(Mediator)