LinuxProgramming(15)
-
[리눅스 프로그래밍 시리즈 24편] 소켓 프로그래밍 기초: TCP 서버/클라이언트 구현 (connect, bind, listen, accept)
목표: TCP 소켓의 기본 흐름을 이해한다 결과: 간단한 서버와 클라이언트를 직접 구현할 수 있다1. 소켓이란?소켓(Socket)은 프로세스 간 네트워크 통신의 끝점(endpoint) 이다.우리가 사용하는 대부분의 네트워크 프로그램은 소켓을 기반으로 동작한다.예:웹 브라우저채팅 프로그램API 서버2. TCP vs UDP프로토콜특징TCP연결 지향, 신뢰성 높음UDP비연결, 빠름이번 편에서는 TCP를 사용한다.3. 서버 측 기본 흐름socket() ↓bind() ↓listen() ↓accept() ↓read()/write()4. 클라이언트 측 기본 흐름socket() ↓connect() ↓read()/write()5. 서버 예제 코드#include #include #include #include int ma..
2026.04.02 -
[리눅스 프로그래밍 시리즈 23편] 공유 메모리 & 메시지 큐: 고급 IPC(프로세스 간 통신) 완전 이해
목표: 공유 메모리와 메시지 큐의 개념과 사용법을 이해한다 결과: 프로세스 간 빠르고 안전하게 데이터를 주고받을 수 있다1. IPC의 진짜 핵심 단계18편에서 pipe를 배웠다.하지만 pipe는 한계가 있다.단방향 통신부모/자식 관계 필요그래서 더 강력한 IPC가 필요하다.공유 메모리 (Shared Memory)메시지 큐 (Message Queue)2. 공유 메모리란?여러 프로세스가 같은 메모리 영역을 공유하는 방식.구조:프로세스 A │ ├── 공유 메모리 ──┤ │프로세스 B장점:매우 빠름 (메모리 직접 접근)대용량 데이터 처리 가능3. 공유 메모리 생성 (shmget)#include #include int shmid = shmget(IPC_PRIVATE, 1024, IPC_..
2026.03.23 -
[리눅스 프로그래밍 시리즈 22편] signal 처리 완전 이해: SIGINT, SIGTERM, SIGCHLD로 프로세스 제어하기
목표: 리눅스 시그널의 개념과 처리 방법을 이해한다 결과: 프로그램에서 인터럽트/종료/자식 종료를 안전하게 처리할 수 있다1. 시그널(signal)이란?시그널은 프로세스에게 보내는 비동기 이벤트 알림이다.예:Ctrl + C → SIGINTkill 명령 → SIGTERM / SIGKILL자식 종료 → SIGCHLD즉 OS가 프로세스에게 "이런 일이 발생했다"고 알려주는 방식이다.2. 주요 시그널 종류시그널의미SIGINT인터럽트 (Ctrl+C)SIGTERM정상 종료 요청SIGKILL강제 종료 (무시 불가)SIGCHLD자식 프로세스 종료SIGSEGV잘못된 메모리 접근3. 기본 동작(Default Action)각 시그널은 기본 동작이 있다.종료무시코어 덤프예:SIGINT → 프로그램 종료4. signal 함수로..
2026.03.20 -
[리눅스 프로그래밍 시리즈 21편] exec 시스템 콜 완전 이해: 현재 프로세스를 다른 프로그램으로 바꾸는 방법
목표: exec 계열 함수의 동작 원리를 이해한다 결과: fork와 exec를 조합해 새로운 프로그램을 실행할 수 있다1. exec는 무엇인가?fork()가 프로세스를 복제한다면, exec()는 현재 프로세스의 내용을 다른 프로그램으로 교체한다.즉,fork() → 새 프로세스 생성exec() → 프로세스 내용 교체exec 호출 이후에는 기존 코드로 돌아오지 않는다.2. exec 계열 함수 종류대표적으로 다음 함수들이 있다.execlexeclpexecvexecvpexecve (기본)가장 많이 쓰는 것은 execvp다.3. execvp 기본 사용법#include int execvp(const char *file, char *const argv[]);예:char *args[] = {"ls", "-l", N..
2026.03.19 -
[리눅스 프로그래밍 시리즈 20편] wait / waitpid 완전 이해: 좀비 프로세스(Zombie Process)와 프로세스 종료 관리
목표: fork로 생성된 자식 프로세스를 올바르게 종료 처리하는 방법을 이해한다 결과: 좀비 프로세스가 왜 발생하는지 알고 wait / waitpid로 해결할 수 있다1. fork 이후 반드시 필요한 작업19편에서 fork()를 이용해 자식 프로세스를 생성하는 방법을 배웠다.하지만 fork만 사용하면 문제가 하나 생긴다.좀비 프로세스(Zombie Process)이 문제를 해결하는 시스템 콜이 바로wait()waitpid()이다.2. 좀비 프로세스란?프로세스가 종료되더라도 바로 완전히 사라지는 것은 아니다.커널은 다음 정보를 잠시 보관한다.종료 상태(exit status)CPU 사용 정보프로세스 ID이 정보를 부모 프로세스가 회수(wait) 해야 한다.하지만 부모가 이 작업을 하지 않으면좀비 프로세스가 된..
2026.03.16 -
[리눅스 프로그래밍 시리즈 19편] fork 시스템 콜 완전 이해: 리눅스에서 새로운 프로세스가 만들어지는 원리
목표: fork 시스템 콜의 동작 원리를 이해한다 결과: 부모 프로세스와 자식 프로세스의 실행 흐름을 이해하고 활용할 수 있다1. 리눅스에서 프로세스는 어떻게 생성될까?리눅스에서 새로운 프로그램이 실행될 때 가장 중요한 시스템 콜이 있다.fork()fork는 현재 실행 중인 프로세스를 복사하여 새로운 프로세스(자식 프로세스) 를 만든다.구조:부모 프로세스 │ fork() │ ┌─────────────┐ │ │부모 자식프로세스 프로세스fork 이후에는 두 개의 프로세스가 동시에 실행된다.2. fork 함수#include pid_t fork(void);fork는 호출 후 두 번 반환된다.반환값의미>0부모 프로세스 (자식 PID 반환)0자..
2026.03.13