SEMOP

Section: Linux Programmer's Manual (2)
Updated: November 1, 1993
Index HOME
 

À̸§

semop - ½Ã±×³Î Á¶ÀÛ.  

»ç¿ë¹ý

# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/sem.h>

int semop ( int semid, struct sembuf *sops, unsigned nsops )  

¼³¸í


 ÀÌ ÇÔ¼ö´Â .IR semid¿¡ ÀÇÇØ Áö½ÃµÈ ¼¼¸¶Æ÷¾î ¼¼Æ® Áß ¼±ÅõȠ¸â¹öµé¿¡ ´ëÇÑ ¿¬»êµéÀ» ¼öÇàÇÑ´Ù. sops°¡ °¡¸®Å°´Â ¹è¿­³»ÀÇ .I nsops ¿ä¼ÒµéÀÇ °³º°ÀûÀÎ °ÍÀº ´ÙÀ½ÀÇ ¸â¹öµéÀ» Æ÷ÇÔÇÏ´Â .B "struct sembuf"¿¡ ÀÇÇÑ ¼¼¸¶Æ÷¾î»ó¿¡¼­ ¼öÇàµÇ´Â ¿¬»êÀ» ¸í½ÃÇÑ´Ù.


      short sem_num;  
/* semaphore number: 0 = first */
      short sem_op;   
/* semaphore operation */
      short sem_flg;  
/* operation flags */

sem_flg¿¡¼­ ÀÎ½ÄµÈ Ç÷¡±×µéÀº IPC_NOWAIT°ú SEM_UNDOÀÌ´Ù. ¸¸ÀÏ ¿¬»êÀÌ .BR SEM_UNDOÀ» ´Ü¾ðÇϸé, ÀÌ´Â ÇÁ·Î¼¼½º°¡ ºüÁ®³ª°¥¶§ ½ÇÆÐÇÒ °ÍÀÌ´Ù.

½Ã½ºÅÛ È£Ãâ Àǹ̴ ¸¸ÀÏ ¸ðµç °ÍÀÌ ¼º°øµÈ´Ù¸é, ¿¬»êµéÀÌ ¼öÇàµÈ´Ù´Â °ÍÀ» º¸ÁõÇÑ´Ù. ¼¼Æ® Áß Ã¹¹øÂ° ¼¼¸¶Æ÷¾î°¡ 0ÀÎ °÷¿¡¼­ ¿¬»êµéÀÌ ¼öÇàµÉ °ÍÀÌ°í ´ÙÀ½ÀÇ ¼¼°¡Áö Áß ÇϳªÀÌ´Ù¶ó´Â °ÍÀ» º¸ÁõÇÑ´Ù. Each operation is performed on the °¢ ¿¬»êÀº ¼¼¸¶Æ÷¾î ¼¼Æ®ÀÇ .BR sem_num -th ¼¼¸¶Æ÷¾î»ó(¼¼Æ® Áß Ã¹¹øÂ° ¼¼¸¶Æ÷¾î°¡ 0ÀÎ °÷¿¡¼­)¿¡¼­ ¼öÇàµÇ°í, ´ÙÀ½ÀÇ ¼¼°¡Áö Áß ÇϳªÀÌ´Ù.

¸¸ÀÏ sem_op°¡ ¾ç¼ö¶ó¸é, ¿¬»êÀº ÀÌ °ªÀ» .BR semvalÀ¸·Î Ãß°¡½ÃŲ´Ù. ´õ¿ì±â, ¸¸ÀÏ SEM_UNDO°¡ ÀÌ ¿¬»ê¿¡ ´ëÇØ ÁÖÀåµÈ´Ù¸é, ½Ã½ºÅÛÀº ÀÌ ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ ÇÁ·Î¼¼½º undo Ä«¿îÆ®¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. ¿¬»êÀº °è¼ÓÀûÀ¸·Î ½ÇÇàµÇ°í, µû¶ó¼­ À¯ÈÞÇÏ´Â ÇÁ·Î¼¼½º´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. È£Ãâ ÇÁ·Î¼¼½º´Â ¼¼¸¶Æ÷¾î ¼¼Æ®¿¡ ´ëÇØ º¯°æ ±ÇÇѵéÀ» °®°í ÀÖ¾î¾ß ÇÑ´Ù.

¸¸ÀÏ sem_op ÀÌ zeroÀ̸é, ÇÁ·Î¼¼½º´Â ¼¼¸¶Æ÷¾î ¼¼Æ®¿¡ ´ëÇÑ Àбâ Á¢±Ù ±ÇÇѵéÀ» °®°í ÀÖ¾î¾ß ÇÑ´Ù. ¸¸ÀÏ semval ÀÌ Á¦·Î¶ó¸é, ¿¬»êÀº ½ÇÇàµÈ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¸¸ÀÏ IPC_NOWAITÀÌ sem_flg³»¿¡¼­ÁÖÀåµÇ¸é, EAGAINÀ¸·Î¼³Á¤µÈ.Berrno¿¡ÀÇÇØ½ÇÆÐÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, semzcnt Àº Çϳª¾¿ Áõ°¡Çϰí, ÇÁ·Î¼¼½º´Â ´ÙÀ½Áß Çϳª°¡ ÀϾ±â Àü±îÁö À¯ÈÞ¿¡ µç´Ù.

*
semval Àº .B semzcntÀÇ °ªÀÌ °¨¼ÒÇÏ´Â ¶§¿¡ 0ÀÌ µÈ´Ù.
*
¼¼¸¶Æ÷¾î ¼¼Æ®´Â »èÁ¦µÈ´Ù. ½Ã½ºÅÛ È£ÃâÀº .BR EIDRMÀ¸·Î ¼³Á¤µÈ .B errno¿¡ ÀÇÇØ ½ÇÆÐÇÑ´Ù.
*
È£Ãâ ÇÁ·Î¼¼½º´Â °¨ÁöµÇ¾î¾ß ÇÏ´Â ½Ã±×³ÎÀ» ¼ö½ÅÇÑ´Ù. semzcntÀÇ °ªÀº °¨¼ÒµÇ°í, ½Ã½ºÅÛ È£ÃâÀº .BR EINTR·Î ¼³Á¤µÈ .B errno¿¡ ÀÇÇØ ½ÇÆÐÇÑ´Ù.

¸¸ÀÏ sem_op ÀÌ 0º¸´Ù ³·´Ù¸é, ÇÁ·Î¼¼½º´Â ¼¼¸¶Æ÷¾î ¼¼Æ®¿¡ ´ëÇÑ º¯°æ ±ÇÇѵéÀ» °®°í ÀÖ¾î¾ß ÇÑ´Ù. ¸¸ÀÏ semval ÀÌ .BR sem_op ÀÇ Àý´ë°ªº¸´Ù ³ô°Å³ª µ¿ÀÏÇÏ´Ù¸é, sem_opÀÇ Àý´ë°ªÀº .BR semval¿¡ ÀÇÇØ °¨¼ÒµÈ´Ù . ´õ¿ì±â, ¸¸ÀÏ SEM_UNDOÀÌ ÀÌ ¿¬»ê¿¡ ´ëÇØ ´Ü¾ðµÈ´Ù¸é, ½Ã½ºÅÛÀº ÀÌ ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ ÇÁ·Î¼¼½º undo Ä«¿îÆ®¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. ±×¸®°í³ª¼­, ¿¬»êÀº °è¼ÓµÈ´Ù. ±×·¸Áö ¾Ê°í, ¸¸ÀÏ Otherwise, if IPC_NOWAITÀÌ .BR sem_flg³»¿¡¼­ ´Ü¾ðµÈ´Ù¸é, ½Ã½ºÅÛ È£ÃâÀº.BR EAGAIN·Î ¼³Á¤µÈ .B errno¿¡ ÀÇÇØ ½ÇÆÐÇÑ´Ù.(¼öÇàµÈ ÀÌÀüÀÇ ¾×¼ÇµéÀ» Ãë¼ÒÇÔÀ¸·Î¼­) ±×·¸Áö ¾ÊÀ¸¸é, Otherwise semncnt´Â Çϳª¿¡ ÀÇÇØ Áõ°¡µÇ°í, ÇÁ·Î¼¼½º´Â ´ÙÀ½ Áß Çϳª°¡ ¹ß»ýÇϱâ Àü±îÁö À¯ÈÞÇÑ´Ù.

*
semval ´Â .BR sem_opÀÇ Àý´ë°ªº¸´Ù µ¿ÀÏÇϰųª ´õ ³ô¾ÆÁø´Ù. semncntÀÇ °ªÀÌ °¨¼ÒµÉ¶§, .B sem_opÀÇ Àý´ë°ªÀº .B semval¿¡¼­ °¨ÇØÁø´Ù. ±×¸®°í SEM_UNDOÀÌ ÀÌ ¿¬»ê¿¡ ´ëÇØ ÁÖÀåµÇ¸é, ½Ã½ºÅÛÀº ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ ÇÁ·Î¼¼½º undo Ä«¿îÆ®¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù.
*
¼¼¸¶Æ÷¾î ¼¼Æ®´Â ½Ã½ºÅÛ¿¡¼­ »èÁ¦µÈ´Ù. ½Ã½ºÅÛ È£ÃâÀº .BR EIDRMÀ¸·Î ¼³Á¤µÈ .B errno¿¡ ÀÇÇØ ½ÇÆÐÇÑ´Ù.
*
È£Ãâ ÇÁ·Î¼¼½º´Â °¨ÁöµÇ¾î¾ß ÇÑ´Â ½Ã±×³ÎÀ» ¼ö½ÅÇÑ´Ù. .B semncntÀÇ °ªÀº °¨¼ÒµÇ°í, ½Ã½ºÅÛ È£ÃâÀº .BR EINTRÀ¸·Î ¼³Á¤µÈ .B errno¿¡ ÀÇÇØ ½ÇÆÐÇÑ´Ù.

In case of success, the ¼º°øÇÒ °æ¿ì, .I sops¿¡ ÀÇÇØ Áö½ÃµÈ ¹è¿­³»¿¡ ¸í½ÃµÈ °³º° ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ ±¸Á¶ .B semÀÇ sempid ¸â¹ö´Â È£Ãâ ÇÁ·Î¼¼½ºÀÇ process-ID ·Î ¼³Á¤µÈ´Ù. ´õ¿íÀÌ, .B sem_otime ¿Í .B sem_ctime ¸ðµÎ ÇöÀç ½Ã°£À¸·Î ¼³Á¤µÈ´Ù.  

¹Ýȯ°ª

If successful the system call returns ¸¸ÀÏ ¼º°øÀûÀ̸é, ½Ã½ºÅÛ È£ÃâÀº .BR 0À» ¸®ÅÏÇϰí, ±×·¸Áö ¾ÊÀ¸¸é, ¿¡·¯¸¦ °¡¸®Å°´Â .B errno¿Í ÇÔ²² .B -1¸¦ ¸®ÅÏÇÑ´Ù.  

¿¡·¯

½ÇÆÐÇÏ´Â ¸®ÅÏ¿¡ ´ëÇÏ¿©, errno´Â ´ÙÀ½ÀÇ °ªµéÁß Çϳª·Î ¼³Á¤µÉ °ÍÀÌ´Ù.
E2BIG
Àμö .I nsops´Â .BR SEMOPM, Áï ½Ã½ºÅÛ È£Ã⸶´Ù Çã¿ëµÈ ¿¬»êµé Áß ÃÖ´ë ¼ýÀÚº¸´Ù ´õ Å©´Ù.
EACCES
È£Ãâ ÇÁ·Î¼¼½º´Â ¸í½ÃµÈ ¿¬»êµé Áß Çϳª¿¡ ÀÇÇØ ¿ä±¸µÇ´Â ¼¼¸¶Æ÷¾î ¼¼Æ®¿¡ ´ëÇÑ Á¢±Ù ±ÇÇÑÀ» °®°í ÀÖÁö ¾Ê´Â´Ù.
EAGAIN
¿¬»êÀº ½ÇÇàµÇÁö ¾Ê°í, .BR IPC_NOWAIT´Â sem_flg³»¿¡ÁÖÀåµÈ´Ù.
EFAULT
sopsÀÌ °¡¸®Å°´Â ÁÖ¼Ò´Â Á¢±ÙÀÌ ºÒ°¡´ÉÇÏ´Ù.
EFBIG
ÀϺΠ¿¬»ê¿¡ ´ëÇÏ¿©, .B sem_num °ªÀº 0 º¸´Ù Àû°Å³ª, ÀÌ ¼¼Æ®¿¡¼­ ¼¼¸¶Æ÷¾îÀÇ ¼ýÀÚµé º¸´Ù Å©°Å³ª µ¿ÀÏÇÏ´Ù.
EIDRM
¼¼¸¶Æ÷¾î ¼¼Æ®´Â »èÁ¦µÇ¾ú´Ù.
EINTR
´ë±â ¿­¿¡¼­ À¯ÈÞ½Ã, ÇÁ·Î¼¼½º´Â °¨ÁöµÇ¾î¾ß ÇÏ´Â ½Ã±×³ÎÀ» ¼ö½ÅÇÑ´Ù.
EINVAL
¼¼¸¶Æ÷¾î ¼¼Æ®´Â Á¸ÀçÇÏÁö ¾Ê°Å³ª, .I semid´Â 0º¸´Ù À۰ųª, nsops´Â Á¤¼ö°¡ ¾Æ´Ñ °ªÀ» °®´Â´Ù.
ENOMEM
´Ü¾ðµÈ .B sem_flg ÀϺΠ¿¬»êÀÇ .B SEM_UNDO¿Í ½Ã½ºÅÛÀº undo ±¸Á¶¸¦ ÇÒ´çÇÒ ÃæºÐÇÑ ¸Þ¸ð¸®¸¦ °®°í ÀÖÁö ¾Ê´Ù.
ERANGE
ÀϺΠ¿¬»ê¿¡ ´ëÇÏ¿©, semop+semval´Â .BR semval¿¡ ´ëÇÑ ±¸Çö ÀÇÁ¸ÀûÀÎ ÃÖ´ë°ªÀÎ .BR SEMVMXº¸´Ù ´õÅ©´Ù. ,
 

ÁÖÀÇ

ÇÁ·Î¼¼½ºÀÇ .B sem_undo ±¸Á¶µéÀº .BR fork (2) ½Ã½ºÅÛ È£ÃâÀÇ ½ÇÇà¿¡¼­ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ó¼ÓµÇÁö ¾Ê´Â´Ù. ´ë½Å¿¡ ÀÌ ±¸Á¶µéÀº .BR execve (2) ½Ã½ºÅÛ È£ÃâÀÇ ½ÇÇà¿¡ ÀÇÇØ °á°úÀûÀÎ ´ëü ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ó¼ÓµÈ´Ù.

´ÙÀ½µéÀº ¼¼¸¶Æ÷¾î ¼¼Æ®»ó¿¡¼­ .B semop È£Ãâ¿¡ ¿µÇâÀ» ¹ÌħÀ¸·Î¼­ ÀÚ¿ø¿¡ ´ëÇÑ ÇѰèÀÌ´Ù.

SEMOPM
ÇϳªÀÇ .B semop È£Ãâ¿¡ ´ëÇØ Çã¿ëµÈ ¿¬»êµéÀÇ ÃÖ´ë ¼ýÀÚ. Á¤Ã¥ ÀÇÁ¸ÀûÀÌ´Ù.
SEMVMX
semval¿¡´ëÇØÃÖ´ë·ÎÇã¿ëµÈ°ª.±¸ÇöÀÇÁ¸ÀûÀÌ´Ù(32767).
 

¹ö±×

½Ã½ºÅÛÀº undo ¿äûÀ¸·Î ÇÁ·Î¼¼½º¿¡ ÀÇÇØ º¯°æµÈ °³º° ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ °³º° ÇÁ·Î¼¼½º .B sem_undo ±¸Á¶¸¦ °ü¸®ÇÑ´Ù. ÀÌ·¯ÇÑ ±¸Á¶µéÀº ÇÁ·Î¼¼½º exit¿¡ ÀÚÀ¯·Ó´Ù. undo ¸ÞÄ¿´ÏÁò¿¡ ÀÖ¾î À߸øµÈ Á¡ÀÇ ÁÖ¿äÇÑ ¿øÀÎÀº ¿¬»êÀÇ ±Ø¼Ò ¼¼Æ®¸¦ ¼¼¸¶Æ÷¸ÓÀÇ ¹è¿­·Î ¸¸µå´Â °ü³ä¿¡ ÀûÇÕÇÏ°Ô ÇѴٴµ¥ ÀÖ´Ù. ¼ö¸¹Àº ¹è¿­ ¹× °³º° ¼¼¸¶Æ÷¾î¿¡ ´ëÇÑ undo ¿äûµéÀº .B semopt È£Ãâµé À§¿¡ ÃàÀûµÉ ¼ö ÀÖ´Ù. ºüÁ®³ª°¥¶§, ÇÁ·Î¼¼½º°¡ ÀáÀÚ°í ÀÖ¾î¾ß Çϴ°¡? ¶Ç´Â ¸ðµç undo ¿¬»êµéÀÌ .B IPC_NOWAIT Ç÷¡±×¿¡ È¿·ÂÀÌ µÉ ¼ö ÀÖµµ·Ï Àû¿ëµÇ¾î¾ß Çϴ°¡? Áï½Ã Àû¿ëµÇ¾î¾ß ÇÏ´Â ÇöÀçÀÇ undo ¿¬»êµéÀº ±â´Ù¸²ÀÌ ÇÊ¿äÇÑ ¿¬»êµéÀº ¹«½ÃµÈ´Ù. µû¶ó¼­, ¾ÇÀÇ ¾ø´Â undoÀÇ È°¿ëÀº »çÀûÀÎ ¼¼¸¶Æ÷¾î¿¡ ÀÇÇØ¼­¸¸ º¸ÁõµÈ´Ù.  

ȣȯ

SVr4, SVID. SVr4´Â EINVAL, EFBIG, ENOSPCÀÇ Ãß°¡ ¿¡·¯ Á¶°Çµé¿¡ ´ëÇÑ ¹®¼­¸¦ Á¦°øÇÑ´Ù.  

°ü·Ã Ç׸ñ

ipc(5), semctl(2), semget(2)  

¿ªÀÚ

ASPLINUX<man@asp-linux.co.kr>, 2000³â 7¿ù 29ÀÏ


 

Index

À̸§
»ç¿ë¹ý
¼³¸í
¹Ýȯ°ª
¿¡·¯
ÁÖÀÇ
¹ö±×
ȣȯ
°ü·Ã Ç׸ñ
¿ªÀÚ