kmsgctl 커널 서비스

용도

메시지 큐 제어 작업을 제공합니다.

구문

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int kmsgctl ( msqid,  cmd,  buf)
int msqid, cmd;
struct msqid_ds *buf;

매개변수

항목 설명
msqid 제어 작업이 요청되는 메시지 큐를 나타내는 메시지 큐 ID를 지정합니다.
CMD 요청되는 제어 작업을 지정합니다. 세 가지 유효한 명령이 있습니다.
buf 다음을 가리킨다. msqid_ds 호출자가 제공한 구조 kmsgctl 서비스. 데이터는 이 구조 또는 이 구조에 반환된 상태에서 얻습니다. cmd 매개변수. 그만큼 msqid_ds 구조는/usr/include/sys/msg.h 파일.

설명

그만큼 kmsgctl 커널 서비스는 다음과 같이 지정된 다양한 메시지 대기열 제어 작업을 제공합니다. cmd 매개변수. 그만큼 kmsgctl 커널 서비스는 커널 모드의 사용자 모드 프로세스에 대해 동일한 기능을 제공합니다. msgctl 서브루틴은 사용자 모드에서 커널 프로세스 또는 사용자 모드 프로세스에 대해 수행됩니다. 그만큼 kmsgctl 서비스는 커널 모드의 사용자 모드 프로세스 또는 커널 프로세스에 의해 호출될 수 있습니다. 커널 프로세스는 다음을 호출할 수도 있습니다. msgctl 동일한 기능을 제공하는 서브루틴입니다.

다음 세 가지 명령을 다음과 같이 지정할 수 있습니다. cmd 매개변수:

항목 설명
IPC_STAT 문서화된 필드만 설정합니다. 참조 msgctl 서브루틴.
IPC_SET 다음과 관련된 데이터 구조의 필드 값을 설정합니다. msqid 매개변수가 가리키는 구조에서 발견된 해당 값에 대한 매개변수입니다. 버프 매개변수:
  • msg_perm.uid
  • msg_perm.gid
  • msg_perm.mode(하위 9비트만 해당)
  • msg_qbytes

수행하려면 IPC_SET 작업을 수행하려면 현재 프로세스에는 해당 값과 동일한 유효 사용자 ID가 있어야 합니다.msg_perm.uid또는msg_perm.cuid관련된 데이터 구조의 필드 msqid 매개변수. 의 가치를 높이기 위해msg_qbytes필드에서 호출 프로세스에는 적절한 시스템 권한이 있어야 합니다.

IPC_RMID 시스템에서 지정된 메시지 대기열 식별자를 제거합니다. msqid 매개변수. 이 작업은 또한 메시지 대기열과 이와 관련된 데이터 구조를 모두 파괴합니다. 이 작업을 수행하려면 현재 프로세스에 해당 값과 동일한 유효 사용자 ID가 있어야 합니다.msg_perm.uid또는msg_perm.cuid관련된 데이터 구조의 필드 msqid 매개변수.

실행 환경

그만큼 kmsgctl 커널 서비스는 프로세스 환경에서만 호출할 수 있습니다.

리턴 값

항목 설명
0 성공적인 완료를 나타냅니다.
EINVAL 다음 중 하나를 나타냅니다.
  • 에 의해 지정된 식별자 msqid 매개변수는 유효한 메시지 대기열 식별자가 아닙니다.
  • 에서 지정한 명령은 cmd 매개변수는 유효한 명령이 아닙니다.
EACCES 에서 지정한 명령은 cmd 매개변수는 다음과 같습니다. IPC_STAT 호출 프로세스에 대한 읽기 권한이 거부되었습니다.
EPERM 에 의해 지정된 명령 cmd 매개변수는 다음과 같습니다. IPC_RMID , IPC_SET , 호출 프로세스의 유효 사용자 ID는msg_perm.uid관련된 데이터 구조의 필드 msqid 매개변수.
EPERM 다음 조건을 나타냅니다.
  • 에 의해 지정된 명령 cmd 매개변수는 다음과 같습니다. IPC_SET .
  • 가치를 높이려는 시도가 이루어지고 있습니다.msg_qbytes필드에 있지만 호출 프로세스에 적절한 시스템 권한이 없습니다.