본문 바로가기

프로그래밍(TA, AA)/C C++

(24)
[C/C++] C와 C++을 동시에 배워보자 시스템 프로그래밍을 다시 복습하면서, C/C++ 언어를 다시 되새기기 위해 강좌를 수강하고 있습니다. 강좌사이트는 역시 입문이 쉬운 코딩 강좌 사이트 인프런입니다. 대학교 다닐때 배웠던 언어이긴 하지만, 스스로 필요에 의해 배우게되니 새로운 마음가짐이 듭니다. "C와 C++을 통시에 배워보자"라는 강좌이고, 빠르게 완강한 뒤, 개인적으로 게임이나 네트워크 관련 프로그램을 제작해보려고 합니다. 강좌리스트는 아래와 같고, 중간중간 유용한 내용이 있다면 정리하여 포스팅해두려고 합니다. 총 71개 강의 구성으로, 16시간 47분입니다. 입문 강좌로 대략적인 내용만 훑는 용도로 빠르게 넘어가겠습니다. 화이팅! 오리엔테이션00 – Visual Studio 설치 방법 00:04:00 입출력과 변수01 – Hello,..
[시스템프로그래밍] 주요 정리 유닉스 시스템 프로그래밍 개요 1. 프로그래밍 표준유닉스 시스템 프로그래밍 관련 표준으로는 ANSI C, IEEE의 POSIX, X/Open 그룹의 XPG3, XPG4, SVID, SUS가 있습니다. 2. 유닉스 시스템 프로그래밍의 이해유닉스 시스템이 제공하는 파일 시스템이나 사용자 정보, 시스템 시간 정보, 네트워킹 등 다양한 서비스를 이용해 프로그램을 구현할 수 있도록 제공되는 프로그래밍 인터페이스를 시스템 호출이라고 하며, 이러한 시스템 호출을 사용해 프로그램을 작성하는 일을 유닉스 시스템 프로그래밍이라고 합니다. 3. 시스템 호출과 라이브러리 함수 시스템 호출은 기본적으로 C언어의 함수 형태로 제공됩니다. 시스템 호출은 커널의 해당 모듈을 직접 호출해 작업을 수행하고 결과를 리턴합니다. 라이브러리..
[통신프로그래밍] IPC(메시지큐, 공유 메모리, 세마포어) 유닉스는 처음 개발된 이래 다양한 형태로 발전했는데, 크게 BSD 계열과 시스템 V 계열로 구분할 수 있습니다. 이중 시스템 V 계열 유닉스에서 개발해 제공하는 프로세스 간 통신 방법이 메시지 큐, 공유 메모리, 세마포어입니다. 흔히 이 세가지를 묶어서 시스템 V IPC라고 합니다. 시스템 V IPC는 SVR2에서 처음 개발되었고, SVR4에서도 제공하고 있으며 현재는 대부분의 유닉스 시스템에서 제공하고 있습니다. 시스템 V IPC를 사용하려면 IPC의 객체를 생성해야 합니다. 이를 위해 공통적으로 사용하는 기본 요소가 키와 식별자입니다. 또한 현재 사용 중인 각 IPC의 상태를 확인하고, 사용을 마친 객체는 삭제할 수 있도록 관리 명령을 제공합니다. 키의 생성 및 IPC 관리 명ㄹ영르 아래에 요약해 두..
[통신프로그래밍] 파이프 파이프는 두 프로세스 사이에서 한 방향으로 통신할 수 있도록 지원합니다. 쉘에서 | 기호는 파이프를 의미합니다. 쉘에서 파이프 기능은 한 명령의 표준 출력을 다음 명령에서 표준 입력을 받아 수행하는 것을 의미합니다. 예를 들어보겠습니다. # grep pipe test.c | more 앞에 있는 명령인 grep pipe test.c의 표준 출력을 다음 명령인 more의 표준 입력으로 사용합니다. 위 예를 실행하면 test.c에서 "pipe"라는 문자열이 위치한 행을 찾아 화면 단위로 출력(more)합니다. 파이프는 이름없는 파이프(익명 파이프:anonymouse pipe)와 (이름 있는 파이프:named pipe)로 구분됩니다. 이름 없는 파이프 : pipe 특별한 수식어 없이 그냥 파이프라고 하면 일반적..
[통신프로그래밍] 메모리 매핑 앞서 시스템프로그래밍 섹션에서 다루었던 프로그램은 대부분 단일 파일로 구성된 매우 간단한 것이었습니다. 하지만 업무 처리나 게임 등 실제 사용하는 응용 프로그램은 이렇게 간단하지 않습니다. 보통 하나 이상의 실행 파일이 생성되고, 이를 실행한 프로세스 사이에서 시그널이나 데이터를 주고받으며 작업을 처리합니다. 이렇게 프로세스 사이에서 데이터를 주고받으려면 통신 프로그래밍이 필요합니다. 통신 프로그래밍을 하면 유닉스 시스템에서 제공하는 다양한 통신 기능을 이용하는 응용 프로그램을 만들 수 있습니다. 유닉스 시스템이 제공하는 통신 기능은 크게 두가지로 구분할 수 있습니다. 하나는 동일한 시스템 안에 있는 프로세스 사이에서 통신을 수행하는 것이고, 두번째는 서로 다른 시스템에서 수행하고 있는 프로세스 사이에서..