본문 바로가기

시스템프로그래밍

(22)
[네트워크] 소켓프로그래밍 기초 01. IP 주소와 포트 번호 TCP/IP 프로토콜을 이용해 통신하려면 IP 주소가 있어야 합니다. 또한 인터넷에서 동작하는 각종 서비스를 구분하기 위한 포트 번호를 지정해야 합니다. 이 절에서는 IP 주소와 포트번호의 기본 개념을 살펴보고, 관련 함수의 사용법을 배웁니다. IP 주소와 호스트명IP 주소는 인터넷을 이용할 때 사용하는 주소로, 점(.)으로 구분된 32비트 숫자로 표시합니다. (예: 192.168.100.51) IP 주소를 네트워크 주소(인터넷 주소) network address(internet address)라고도 합니다. IP 주소는 A~C 클래스로 구분됩니다. 시스템은 주소를 숫자로 구분하는 것이 효율적이지만, 사람은 주소를 이름으로 구분하는 것이 더 편합니다. 따라서 시스템에는 IP..
[통신프로그래밍] 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 특별한 수식어 없이 그냥 파이프라고 하면 일반적..
[통신프로그래밍] 메모리 매핑 앞서 시스템프로그래밍 섹션에서 다루었던 프로그램은 대부분 단일 파일로 구성된 매우 간단한 것이었습니다. 하지만 업무 처리나 게임 등 실제 사용하는 응용 프로그램은 이렇게 간단하지 않습니다. 보통 하나 이상의 실행 파일이 생성되고, 이를 실행한 프로세스 사이에서 시그널이나 데이터를 주고받으며 작업을 처리합니다. 이렇게 프로세스 사이에서 데이터를 주고받으려면 통신 프로그래밍이 필요합니다. 통신 프로그래밍을 하면 유닉스 시스템에서 제공하는 다양한 통신 기능을 이용하는 응용 프로그램을 만들 수 있습니다. 유닉스 시스템이 제공하는 통신 기능은 크게 두가지로 구분할 수 있습니다. 하나는 동일한 시스템 안에 있는 프로세스 사이에서 통신을 수행하는 것이고, 두번째는 서로 다른 시스템에서 수행하고 있는 프로세스 사이에서..
[시스템프로그래밍] 시그널 시그널은 소프트웨어 인터럽트(software interrupt)로, 프로세스에 뭔가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것입니다. 시그널은 0으로 나누기처럼 프로그램에서 예외적인 상황이 일어나는 경우나, 프로세스가 시그널을 보낼 수 있는 함수를 사용해 다른 프로세스에 시그널을 보내는 경우에 발생합니다. 보통 시그널로 전달되는 메시지는 무엇이 발생했는지를 표시하는 미리 정의된 상수를 사용합니다. 시그널을 받은 프로세스는 시그널에 따른 기본 동작을 수행하거나, 시그널을 무시하거나, 시그널 처리를 위해 특별히 지정된 함수를 수행하도록 할 수 있습니다. 프로그램에서 시그널을 보내려면 아래 함수들을 사용하며, 이중 kill 함수를 가장 많이 사용합니다. 기능 함수원형 시그널 보내기 int kil..