Programming 51

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

openssl을 활용한 SSL 통신

개요본 글에서는 OpenSSL 라이브러리를 활용한 SSL(Secure Socket Layer) 통신의 원리와 구현 방법에 대해 다룬다. SSL은 인터넷 통신에서 데이터의 기밀성과 무결성을 보장하는 암호화 프로토콜로, 현대 보안 통신의 근간을 이루고 있다. OpenSSL은 SSL과 TLS(Transport Layer Security) 프로토콜의 오픈소스 구현체로, 다양한 암호화 기능을 제공한다. 이 글에서는 OpenSSL을 활용하여 클라이언트-서버 간 안전한 통신을 구현하는 방법을 코드 예제와 함께 설명한다.SSL 통신의 이해SSL/TLS의 개념SSL은 Netscape에 의해 개발된 보안 프로토콜로, 현재는 이를 발전시킨 TLS가 표준으로 사용되고 있다. 그러나 관행적으로 두 용어는 혼용되어 사용된다. S..

Programming/C 2025.03.17

unistd.h의 getopt() 함수를 활용한 argument 핸들링

개요getopt() 함수는 C 프로그래밍에서 명령줄 인자를 파싱 하기 위해 사용되는 함수이다. 이 함수는 unistd.h 헤더 파일에 정의되어 있으며, 주로 UNIX 계열 운영체제에서 사용된다. getopt() 함수를 사용하면 복잡하고 다양한 형식의 명령줄 인자를 쉽게 처리할 수 있어 프로그램의 사용성을 높일 수 있다.getopt() 함수의 사용법getopt() 함수는 명령줄 인자 중 옵션에 해당하는 인자들을 순차적으로 검사하여, 발견되는 옵션 문자를 반환한다. 옵션 문자란 -로 시작하는 짧은 명령어 (예: -a, -b)를 말합니다. 옵션에 추가 데이터가 필요한 경우, 콜론(:)을 사용하여 표시할 수 있다.함수 원형은 다음과 같다:cint getopt(int argc, char * const argv[]..

Programming/C 2025.03.15

if-else 구조 vs lookup table구조

개요C 언어를 사용하다 보면 if-else 구문을 많이 사용할 것이다. 하지만 if-else 구조가 많아질수록 효율성은 많이 떨어지게 된다.이때, if-else 구조로 처리해야 하는 로직이 많을 경우 lookup table 형식으로 보다 효율적인 코딩 및 유지보수를 할 수 있다.if-else 구조 예제 코드아래는 기본적인 if-else를 사용하여 특정 조건에 맞는 값을 리턴하는 코드이다.#include #include #define PG_CIPHER_AES_GCM 0#define PG_CIPHER_AES_CTR 1#define PG_CIPHER_AES_KWP 2#define PG_CIPHER_AES_XTS 3#define PG..

Programming/C 2025.03.13

YAML 개요 및 libyaml 사용법

개요YAML은 사람이 읽을 수 있는 데이터 직렬화 언어이다. 구성 파일과 데이터가 저장되거나 전송되는 응용 프로그램에 일반적으로 사용된다.YAML은 XML(Extensible Markup Language)과 동일한 많은 통신 응용 프로그램을 대상으로 하지만 SGML(Standard Generalized Markup Language)과는 의도적으로 다른 최소 구문을 가지고 있다.파이썬 스타일 들여쓰기를 사용하여 네스팅을 나타내며 대부분의 문자열 값에 대한 따옴표를 필요로 하지 않는다.사용자 지정 데이터 유형이 허용되지만 YAML은 기본적으로 스칼라(예: 문자열, int 및 float), 목록 및 연관 배열(map, dictionary 또는 hash)을 인코딩한다. 이러한 데이터 유형은 펄 프로그래밍 언어를..

Programming/C 2025.03.10

OpenSSL로 ARIA-CCM 구현

서론ARIA(Advanced Reversible Information Algorithm)는 한국에서 개발된 블록 암호 알고리즘으로, 128비트 블록 크기와 128, 192, 256비트 키 길이를 지원한다. ARIA는 한국 표준으로 채택되어 다양한 보안 응용 프로그램에서 사용되고 있으며, 특히 데이터의 기밀성을 보장하는 데 중요한 역할을 한다.CCM(Counter with CBC-MAC)은 인증된 암호화 모드로, 데이터의 기밀성뿐만 아니라 무결성도 보장한다. CCM 모드는 블록 암호를 사용하여 데이터를 암호화하고, 동시에 인증 태그를 생성하여 데이터가 변조되지 않았음을 확인할 수 있게 한다. 이러한 특성 덕분에 CCM 모드는 네트워크 프로토콜, 파일 암호화, 그리고 다양한 보안 응용 프로그램에서 널리 사용..

Programming/C 2025.03.04

pyenv로 여러 개의 Python 버전 관리하기

개요Python은 다양한 버전이 존재하고, 각 프로젝트마다 필요한 버전이 다를 수 있다. 이럴 때 pyenv를 사용하면 여러 개의 Python 버전을 쉽게 관리할 수 있다. pyenv는 특정 프로젝트에 맞는 Python 버전을 설정하고, 필요에 따라 쉽게 전환할 수 있도록 도와준다. 본 글에서는 Mac에서 pyenv를 설치하고 사용하는 방법에 대해 자세히 알아보자.설치pyenv를 설치하기 위해 Homebrew를 사용한다.brew install pyenv이제 pyenv가 정상적으로 설치되었는지 확인해보자. 다음 명령어를 입력하면 pyenv의 버전이 출력된다.pyenv --version설치가 완료되면, 다양한 Python 버전을 설치할 수 있다. 예를 들어, Python 3.12.9를 설치하고 싶다면 아래의..

Programming/python 2025.02.17

string::compare의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공하며, 그중 string::compare() 함수는 두 문자열을 비교하는 데 사용된다. 이 함수는 문자열 간의 사전적 순서를 판단할 수 있게 해 주며, 문자열 비교 작업에서 매우 유용하다.설명string::compare() 함수는 다음과 같은 형식을 가진다:이 함수는 대소문자를 구분하며, 비교할 문자열의 길이를 넘어서는 경우에는 std::string::npos를 사용하여 기본값을 설정할 수 있다.int compare(const string& str) const noexcept;int compare(size_t pos1, size_t len1, const string& str) const;int compare(size_t ..

Programming/C++ 2025.02.12

std::find 함수의 개념과 활용

개요C++의 std::string 클래스는 문자열을 다루기 위한 다양한 메서드를 제공한다. 그중 string::find() 함수는 특정 문자열이나 문자를 검색하는 데 사용된다. 이 함수는 문자열 내에서 지정된 부분 문자열이 처음으로 나타나는 위치를 반환하며, 검색 기능은 문자열 처리에서 매우 유용하게 활용된다.이 함수는 문자열 검색과 관련된 코딩 테스트에서 자주 출제되는 유형 중 하나이다. 예를 들어, 주어진 문자열에서 특정 단어가 몇 번 나타나는지를 확인하는 문제가 있을 수 있다. 이때 string::find() 함수를 사용하면 효율적으로 문제를 해결할 수 있다.설명string::find() 함수는 다음과 같은 형식을 가진다:size_t find(const string& str, size_t pos =..

Programming/C++ 2025.02.11
728x90
반응형