linux can 통신 예제

파이프 및 메시지 큐 API는 기본적으로 단방향입니다: 한 프로세스가 쓰고 다른 프로세스는 읽습니다. 양방향 명명 된 파이프의 구현이 있지만, 내 두 센트는이 IPC 메커니즘이 가장 간단 할 때 최고라는 것입니다. 앞에서 설명했듯이 메시지 큐의 인기도는 떨어졌지만 그럴 만한 이유가 없습니다. 이러한 큐는 IPC 도구 상자의 또 다른 도구입니다. 3부에서는 소켓과 신호를 통해 IPC의 코드 예제를 사용하여 IPC 도구 상자의 빠른 둘러보기 작업을 완료합니다. ipcs는 UNIX/Linux 명령으로, 프로세스 간 통신 ipcs 명령에 대한 정보를 나열하는 데 사용되며 시스템 V IPCS(메시지 큐, 세마포어 및 공유 메모리)에 대한 보고서를 제공한다. 이 장에서는 유닉스의 네트워크 통신 유틸리티에 대해 자세히 설명합니다. 분산 환경에서 작업하는 경우 원격 사용자와 통신해야 하며 원격 유닉스 컴퓨터에도 액세스해야 합니다. 일반적으로 두 프로세스는 다음 프로세스 간 통신 기술 중 하나를 통해 단일 시스템에서 서로 통신합니다. 이제 장면은 명명되지 않은 파이프를 통해 통신하는 두 개의 프로세스가 있는 프로그램에 대해 설정됩니다. MT-Safe 값(다중 스레드용 MT 포함)은 mq_open 함수가 스레드 안전성을 의미하며, 이는 프로세스 안전성을 의미합니다.

동일한 프로세스에서 이러한 조건은 다른 프로세스의 스레드 간에 발생할 수 없습니다. MT-Safe 특성은 mq_open 호출에서 경합 조건이 발생하지 않음을 보장합니다. 일반적으로 채널 기반 IPC는 동시 안전하지만 다음 예제에서는 주의 사항도 제기됩니다. 이제 메시지 전달을 통해 프로세스 간의 통신에 대한 논의를 시작합니다. 이 메서드에서 프로세스는 어떤 종류의 공유 메모리를 사용 하지 않고 서로 통신 합니다. p1과 p2가 서로 통신하기를 원하는 경우 각 프로세스마다 고유한 주소 공간과 고유한 사용자 공간이 있기 때문에 프로세스가 서로 통신하는 방법은 다음과 같습니다. 쪽지 전달에서 통신하려는 프로세스는 통신받는 사람 또는 보낸 사람의 이름을 명시적으로 지정해야 합니다. 예를 들어 보내기(p1, 메시지)는 메시지를 p1로 보내는 것을 의미합니다. 마찬가지로 수신(p2, 메시지)은 p2로부터 메시지를 수신하는 것을 의미합니다. 이 통신 방법에서는 통신 링크가 자동으로 설정되어 단방향 또는 양방향이 될 수 있지만 한 쌍의 발신자와 수신자 및 한 쌍의 발신자와 수신자 간에 하나의 링크를 사용할 수 있습니다. 두 쌍 이상의 링크. 송신과 수신 사이의 대칭과 비대칭도 구현될 수 있습니다.

즉 두 프로세스 모두 메시지를 보내고 받기 위해 서로 이름을 지정하거나 발신자만 메시지를 보내기 위해 수신자의 이름을 지정하고 이름을 지정할 필요가 없습니다. 메시지를 수신하기 위한 발신자입니다. 이 통신 방법의 문제는 한 프로세스의 이름이 변경되면 이 메서드가 작동하지 않는다는 것입니다. 간접 메시지 전달에서 프로세스는 메시지를 보내고 받기 위해 사서함(포트라고도 함)을 사용합니다. 각 사서함에는 고유한 ID가 있으며 프로세스는 사서함을 공유하는 경우에만 통신할 수 있습니다. 프로세스가 공통 사서함을 공유하고 단일 링크를 여러 프로세스와 연결할 수 있는 경우에만 설정된 링크입니다. 각 프로세스 쌍은 여러 통신 링크를 공유할 수 있으며 이러한 링크는 단방향 또는 양방향일 수 있습니다. 간접 메시지 전달을 통해 통신하려는 두 프로세스가 필요한 작업이라고 가정합니다. 사용되는 표준 기본 값은 : 사서함 A로 메시지를 보내는 것을 의미하는 보내기(A, 메시지)입니다. 수신 메시지에 대한 기본 값도 수신(A, 메시지)과 같은 방식으로 작동합니다.

이 사서함 구현에 문제가 있습니다. 동일한 사서함을 공유하는 프로세스가 두 개 이상 있고 프로세스 p1이 사서함에 메시지를 보낸다고 가정합니다. 이 문제는 두 프로세스만 단일 사서함을 공유할 수 있도록 강요하거나 지정된 시간에 수신을 실행하거나 임의로 프로세스를 선택하고 보낸 사람에게 수신자에게 알리는 하나의 프로세스만 허용되도록 적용하여 해결할 수 있습니다.