Programming/C 26

pthread의 이해와 구현: 멀티스레딩 프로그래밍의 기초

개요pthread(POSIX 스레드)는 UNIX 계열 운영체제에서 병렬 프로그래밍을 위한 표준 API이다. 멀티코어 프로세서가 보편화된 현대 컴퓨팅 환경에서 pthread는 효율적인 병렬 처리를 구현하는 핵심 기술로 자리잡았다. 본 글에서는 pthread의 기본 개념부터 실제 구현 방법까지 살펴보고자 한다.설명pthread는 POSIX(Portable Operating System Interface) 표준의 일부로, 다양한 운영체제에서 일관된 스레드 프로그래밍 환경을 제공한다. 스레드는 프로세스 내에서 실행되는 독립적인 실행 흐름으로, 같은 프로세스 내의 스레드들은 메모리 공간을 공유한다. pthread 라이브러리는 스레드 생성, 동기화, 종료 등 스레드 관리에 필요한 다양한 함수를 제공한다.pthrea..

Programming/C 2025.04.08

C언어의 #error와 #line 전처리기 지시자

개요C언어의 전처리기(preprocessor)는 컴파일 과정 이전에 수행되는 중요한 단계로, 소스 코드를 변환하고 준비하는 역할을 담당한다. 이 중 #error와 #line 지시자는 개발 과정에서 코드의 품질과 디버깅을 향상시키는 데 유용한 도구이다. 본 글에서는 이 두 지시자의 기능, 활용법 및 실제 사용 예제를 자세히 살펴본다.설명#error 지시자#error 지시자는 컴파일러에게 의도적으로 오류를 발생시키도록 지시한다. 이는 특정 조건이 충족되지 않을 때 컴파일을 중단시키고 개발자에게 경고하는 데 사용된다. 개발자가 정의한 메시지와 함께 컴파일 오류가 발생하여 잠재적인 문제를 사전에 방지한다.#line 지시자#line 지시자는 컴파일러에게 소스 코드의 라인 번호와 파일명을 재정의하도록 지시한다. 이..

Programming/C 2025.04.03

C언어에서 날짜 비교 및 만료일 계산 방법

개요C 언어에서 문자열 형태의 날짜와 현재 시간을 비교하여 만료일까지 남은 일수를 계산하는 방법을 다룬다. 이 기술은 라이센스 검증, 이벤트 타이머, 계약 만료 알림 등 다양한 시스템에서 활용될 수 있다.설명C 언어에서 날짜와 시간을 처리하기 위해서는 time.h 라이브러리를 사용한다. 이 라이브러리는 시간 관련 구조체와 함수들을 제공하며, 특히 time_t와 struct tm 타입을 통해 Unix epoch 시간(1970년 1월 1일부터 경과한 초 단위)과 사람이 읽을 수 있는 날짜 형식 간의 변환을 지원한다.날짜 비교 과정은 크게 세 단계로 나뉜다:문자열 형태의 목표 날짜를 epoch 시간으로 변환현재 시간을 epoch 시간으로 변환 (시/분/초는 0으로 설정)두 epoch 시간을 비교하여 남은 일수..

Programming/C 2025.04.02

OpenSSL을 이용한 RSA 암호화/복호화 구현

개요RSA 암호화 알고리즘은 현대 암호학에서 가장 널리 사용되는 비대칭 암호화 방식 중 하나이다. 본 글에서는 OpenSSL 라이브러리를 활용하여 RSA 암호화/복호화를 C 언어로 구현하는 방법을 상세히 설명한다. OpenSSL 소스코드 빌드부터 XCode 설정, RSA 키를 활용한 암호화/복호화까지 전체 과정을 다룬다.설명RSA 암호화는 공개키(Public Key)와 개인키(Private Key)를 사용하는 비대칭 암호화 방식이다. 공개키로 암호화된 데이터는 개인키로만 복호화할 수 있으며, 그 반대도 가능하다. 이러한 특성으로 인해 RSA는 안전한 통신, 전자서명, 인증 등 다양한 보안 분야에서 활용된다.OpenSSL은 SSL/TLS 프로토콜과 다양한 암호화 알고리즘을 제공하는 오픈소스 라이브러리로, ..

Programming/C 2025.04.01

C언어로 인터넷 연결 상태 확인하기

개요현대 소프트웨어 애플리케이션에서 네트워크 연결 상태 확인은 필수적 기능으로 간주된다. 특히 인터넷 연결 상태를 확인하는 것은 클라이언트-서버 애플리케이션, 웹 서비스, 원격 데이터베이스 접근 등 다양한 응용 프로그램에서 중요한 선행 조건이다. 본 연구에서는 C 언어를 이용한 효율적 인터넷 연결 상태 확인 방법론을 제시한다. 이를 위해 Google DNS 서버(8.8.8.8)와 같은 신뢰할 수 있는 외부 서버에 대한 소켓 연결을 시도하여 연결 성공 여부를 판단하는 방식을 채택했다. 또한 Linux/macOS와 Windows와 같은 이기종 운영체제 환경에서의 구현 방법을 비교 분석하고, 네트워크 연결 확인을 위한 대체 방법론과 최적화 기법을 함께 제시한다.소켓 프로그래밍 기본 개념소켓(Socket)은 네..

Programming/C 2025.03.29

cJSON을 활용한 JSON 파싱

개요JSON(JavaScript Object Notation)은 데이터 교환 형식으로 널리 사용되며, 그 단순함과 가독성 때문에 인기가 높다. C언어에서 JSON을 처리하기 위해서는 별도의 라이브러리가 필요한데, 그 중 cJSON은 가볍고 사용하기 쉬운 라이브러리로 널리 활용된다. 이 글에서는 cJSON 라이브러리를 사용하여 C언어에서 JSON 데이터를 파싱하는 방법에 대해 살펴본다.설명cJSON은 Dave Gamble이 개발한 C언어용 경량 JSON 파싱 라이브러리이다. 단일 C 파일과 헤더 파일로 구성되어 있어 프로젝트에 쉽게 통합할 수 있다. cJSON은 JSON 데이터를 파싱하고 생성하는 기능을 제공하며, 메모리 관리도 단순하게 설계되어 있다.cJSON의 주요 특징은 다음과 같다:가벼운 구현: 단..

Programming/C 2025.03.25

환경변수와 디렉토리 생성: C 언어에서의 크로스 플랫폼 접근

개요이 글에서는 C 언어를 사용하여 환경변수를 확인하고 디렉토리를 생성하는 방법에 대해 설명한다. 특히 Windows와 Linux 같은 서로 다른 운영체제에서 이러한 작업을 수행하는 방법의 차이점과 크로스 플랫폼 코드 작성 방법에 초점을 맞춘다. 환경변수 접근을 위한 getenv() 함수와 디렉토리 생성을 위한 mkdir()(Linux) 및 CreateDirectoryA()(Windows) 함수의 사용법과 예제 코드를 통해 실제 구현 방법을 알아보자.환경변수 확인getenv(const char* name) - stdlib.hgetenv() 함수는 name 이름을 가지는 환경변수에 저장된 값을 읽어온다.환경변수는 "key=value" 형태로 저장되며, getenv()의 아규먼트로 들어가는 name 은 이 ..

Programming/C 2025.03.22

open() 과 fopen()의 차이점

개요파일 작업은 C 언어에서 두 가지 주된 방법으로 수행된다. 바로 open() 함수와 fopen() 함수이다. 이 두 함수는 각각 파일을 다루는 방식이 다르며, 이로 인해 다양한 장단점이 존재한다.파일 디스크립터 vs 파일 스트림파일 디스크립터:open() 함수는 파일을 구별하기 위해 정수 번호인 파일 디스크립터를 사용한다.기본적인 입출력 기능을 수행할 수 있는 다양한 시스템 호출과 연결된다.파일 스트림:fopen() 함수는 FILE 구조체를 이용하여 파일 스트림을 관리한다.더욱 다양한 타입의 데이터 처리 및 버퍼링 기능을 지원하여 편리함을 제공한다.파일 디스크립터 (open)파일 스트림 (fopen)open()fopen()close()fclose()read()fgetc()write()fputc()ls..

Programming/C 2025.03.20

popen 함수

개요popen() 함수는 C언어에서 외부 프로세스를 실행하고 해당 프로세스의 입출력 스트림에 접근할 수 있는 강력한 시스템 호출이다. 이 함수는 shell 명령어를 실행하고 그 결과를 파이프를 통해 읽거나 쓸 수 있게 해준다. 주로 Unix 및 Linux 시스템에서 사용되며, 시스템 명령을 실행하고 그 출력을 프로그램 내에서 처리해야 할 때 유용하다. 본 글에서는 popen() 함수의 기본 원리, 구문, 사용 사례를 살펴보고자 한다.예제 코드#include #include #include #define MAX_BUFFER_SIZE 1024int execute_command(void){ FILE *fp; char command[] = "/bin/bash -c \\"echo -n 'HELLO WO..

Programming/C 2025.03.19

C언어로 하는 TCP/IP 소켓 통신

개요TCP/IP 소켓 통신은 네트워크 프로그래밍의 기본이다. 컴퓨터 간 데이터를 안정적으로 교환하기 위한 방법으로, 인터넷과 대부분의 현대 네트워크 애플리케이션의 근간을 이룬다. 본 글에서는 C언어를 사용한 TCP/IP 소켓 프로그래밍의 기본 개념과 구현 방법을 소개한다. 클라이언트-서버 모델을 중심으로 실제 작동하는 코드 예제를 통해 소켓 통신의 핵심 원리를 설명한다.설명소켓 통신의 기본 개념소켓은 네트워크 통신을 위한 엔드포인트로, IP 주소와 포트 번호의 조합으로 식별된다. TCP/IP 프로토콜에서 소켓은 두 컴퓨터 간의 양방향 통신 채널을 제공한다. 소켓 통신은 다음 주요 단계로 이루어진다:소켓 생성서버에서는 포트에 바인딩 및 연결 요청 대기클라이언트에서는 서버에 연결 요청데이터 송수신연결 종료T..

Programming/C 2025.03.18
728x90
반응형