2010-01-15 5 views
4

안녕하세요 ...Linux에서 프로세스 간 통신을 위해 "키"를 선택하는 방법은 무엇입니까?

나는 5 가지 과정이 있다는 숙제를하고 있습니다. 서버 및 나머지는 클라이언트입니다. 각 프로세스는 다른 실행 파일에서 실행되어야합니다. 해결책을 전달하는 양방향 메시지를 구현하려고하지만 문제는 메시지 전달 자체에 관한 문제가 아닙니다. 다른 실행 파일간에 을 전달하는 멋진 방법이 있습니까? 즉, 나는 다음과 같은 함수를 호출 할 때 :

다른 프로세스가 키를 알고 해야하는 방법
int msgget(key_t key, int msgflg); 

?

내 숙제는 미리 결정된 키를 사용해도 문제가 없지만 실제 프로그램에서 어떻게 수행되는지 알고 싶습니다. 관련없는 프로세스가 일부 사용자의 컴퓨터에서 내 키를 묻는다면 "이해"하는 것이 충돌 할 수 있기 때문입니다.

답변

1

AFAIK, 일반적으로 프로그램에 대한 임의의 키를 생성하여 거기에 임베드합니다. 2^32 개의 가능한 키가 있으므로 충돌 가능성은 매우 작습니다.

실수로 충돌을 방지해야하는 경우 일반적으로 메시지 전달 대신 명명 된 파이프를 사용합니다.

+0

그 이유는 실제로 내 마음에 왔을 것입니다. 아마도 실제로 충돌이 일어날 수 있다고 가정하고 있습니다. 실제로 실제로는 일어나지 않습니다. 나는 다른 해결책이 제안되지 않으면이 대답을 선택할 것이다. – AraK

9

하나의 규칙() 함수가 존재하는 를 참조해야합니다 주어진 패스 명이 나타내는 파일의 신원 를 (사용 man

에서, 고유 키를 생성하는 FTOK을 ftok()을 사용하는 것입니다 , 액세스 가능 파일) key_t 유형 System V IPC 키를 생성하려면 의 최하위 8 비트 (0이 아니어야 함), msgget (2), semget shmget (2).

결과 값은

PROJ_ID 동일한 값이 사용 인 경우 동일한 파일 이름 모든 패스 동일하다. (동시에 기존) 파일 또는 프로젝트 ID 이 다를 경우 반환되는 값은 이어야합니다.

그는 단지 나보다 :)

와에있어 내가 jspcal의 ftok() 대답을 회지지 해요 "글로벌"자원의

+0

고마워. 실례지만 대답을 잘못 이해 한 경우 실행 파일간에 "생성 된 키"를 어떻게 공유합니까? 즉, 서버에서 키를 얻은 후 클라이언트와 어떻게 통신합니까? – AraK

+1

클라이언트에서 동일한 인수를 사용하여 ftok을 실행합니다. – hobbs

+0

@hobbs 설명을 올바르게 읽으면 해당 경로에 파일이 있어야하므로 미리 지정된 임의의 "긴"문자열은 옵션이 아닙니다. – AraK

1

당신은 (즉, 부모와 무리입니다 관련 프로세스의 무리가있는 경우) 그리고 큐를 공유해야한다면, 사용하지 않는 키가있는 큐를 생성하고 핸들을 반환하는 msgget을 IPC_PRIVATE으로 호출해야합니다.

관련 문제