���� ť�� ���� ������ �����ϱ� ����, msgctl() �ý��� ȣ���� ����Ѵ�.
SYSTEM CALL: msgctl(); PROTOTYPE: int msgctl ( int msgqid, int cmd, struct msqid_ds *buf ); RETURNS: 0 on success -1 on error: errno = EACCES (No read permission and cmd is IPC_STAT) EFAULT (Address pointed to by buf is invalid with IPC_SET and IPC_STAT commands) EIDRM (Queue was removed during retrieval) EINVAL (msgqid invalid, or msgsz less than 0) EPERM (IPC_SET or IPC_RMID command was issued, but calling process does not have write (alter) access to the queue) NOTES:
int get_queue_ds( int qid, struct msgqid_ds *qbuf ) { if( msgctl( qid, IPC_STAT, qbuf) == -1) { return(-1); } return(0); }
ť�� ���� �ڷ� ����ü�� ���纻�� ������ ���� ��, � Ư���� ������ �� �ְ�, �װ͵��� ��� �����ų �� �ִ°�? �ڷ� ���� �ȿ��� ���� ������ �� �ִ� �������� ipc_perm ����̴�. �̰��� ����(owner)�� ������(creator)�� ���� ������ ����, ť�� �㰡���� �����Ѵ�. ������ ������ ���ִ� ipc_perm ����ü�� ������� mode,uid,gid ���̴�. ����(owner)�� user id, ����(owner)�� group id, ť�� ���� �㰡����(access permission)�� �ٲ� �� �ִ�.
ť�� ���(mode)�� �ٲٵ��� ���ȵ� wrapper �Լ��� ����� ����. ���(mode)�� ���� �迭�� �Ѱ����� �Ѵ� (i.e. "660").
int change_queue_mode( int qid, char *mode ) { struct msqid_ds tmpbuf; /* ���� �ڷ� ������ ���� ���纻�� ��ȸ�Ѵ� */ get_queue_ds( qid, &tmpbuf); /* ������ �ⱳ�� ����Ͽ� �㰡����(permission)�� �����Ѵ� */ sscanf(mode, "%ho", &tmpbuf.msg_perm.mode); /* ���� �ڷ� ������ �����Ѵ� */ if( msgctl( qid, IPC_SET, &tmpbuf) == -1) { return(-1); } return(0); }
����! ť�� �㰡������ ������ �� �ְ�, ���� �ؼ� ���Ǿƴϰ� �����θ� ���ܽ�ų �� �ִ�. ����϶�, �̷��� IPC ��ü���� ������ �����ϰų� �ý����� ��������� ������ �������� �ʴ´�. ���� ipcs�� ������ ť�� �� �� ���ٰ� �Ͽ� �������� �ʴ´ٴ� ���� �ǹ������� �ʴ´�.
�� ���� �����ϱ� ����, �ټ� ����ִ� ��ȭ�� �Ұ��ϰڴ�. South Florida ���п��� ���н� ���θ� ����ġ�� ����, ���� ���� ��Ȳ������ ������� ����(Blocking)�� �����ߴ�. �����㿡 ���� �����ϰ��� �������� ���� �����ھ��� ��Ʈ�ϰ� �������ϱ� ���� ������ ������ �����ߴ�. ��Ʈ�� �ϴ� ���ȿ� ���� �ڵ�ȿ� ���� ť�� �㰡����(permission)�� �����ϴ� Ÿ���� ������ٴ� ����� ���Ҵ�. ���� ������ ���� ť�� �������, �ƹ��� ������� �ְ� ���� �� �ִ����� ��Ʈ �ߴ�. ������, ���� ť�� ��带 "660"���� "600"���� �����Ϸ��� ���� ��, �� �ڽ��� ť�� ���� �� �ڽ��� ���ƹ����� ����� �ʷ��ߴ�. ��������� ���� �� �ҽ� ���丮�� ���� �������� ���� ť �����۾��� ��Ʈ �� �� ������. ���� IPC Ű�� ����� ���� ftok() �Լ��� ����߱, ���� ť�� �����Ϸ��� �� �� ���� ������ �㰡����(permission)�� ���� ���� ���ߴ�. ������ �ִ� ��ħ�� �ᱹ ���� ���� �ý��� �����ڿ��� ���� ť�� ���������� �� �װ� ���� ���� ipcrm ���ɾ ������Ѿ� �ϴ����� �ѽð����� �����ϰ� ������ ���´�.ť�κ��� ���������� ������ ���� ��, ������ ���ŵȴ�. �տ����� ����ߴ� ��ó��, IPC ��ü�� ������ ���ŵǰų� �ý����� ��������� �ʴ� �� �ý��ۿ� ���� �ִ´�. ���Ƿ�, �츮�� ���� ť�� ������ Ŀ�ξȿ� �����ϰ� ���� ������ ����� �Ŀ��� ��� ����� �� �ִ�. ���� ť�� ���� �ֱ�(life cycle)�� �ϼ��ϱ� ���� IPC_RMID ���ɾ ����Ͽ� msgctl()�� ȣ� ���� ���ŵǾ�� �Ѵ�.:
int remove_queue( int qid ) { if( msgctl( qid, IPC_RMID, 0) == -1) { return(-1); } return(0); }
Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved
Email To:Webmaster ,
Another address
LAST UPDATE Nov 18,1997
Created Nov 17,1997