sigqueue(3) - wariua/manpages-ko GitHub Wiki

NAME

sigqueue - ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ‹œκ·Έλ„κ³Ό 데이터 νμž‰ ν•˜κΈ°

SYNOPSIS

#include <signal.h>

int sigqueue(pid_t pid, int sig, const union sigval value);

glibc κΈ°λŠ₯ 확인 맀크둜 μš”κ±΄ (feature_test_macros(7) μ°Έκ³ ):

sigqueue():
_POSIX_C_SOURCE >= 199309L

DESCRIPTION

sigqueue()λŠ” pid에 μ€€ PID의 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ sig에 μ§€μ •ν•œ μ‹œκ·Έλ„μ„ 보낸닀. μ‹œκ·Έλ„μ„ 보내기 μœ„ν•΄ ν•„μš”ν•œ κΆŒν•œμ€ kill(2)κ³Ό κ°™λ‹€. kill(2)μ—μ„œμ²˜λŸΌ 널 μ‹œκ·Έλ„(0)을 μ΄μš©ν•΄ ν•΄λ‹Ή PID의 ν”„λ‘œμ„ΈμŠ€κ°€ μ‘΄μž¬ν•˜λŠ”μ§€ 확인할 수 μžˆλ‹€.

μ‹œκ·Έλ„μ— λ™λ°˜ν•΄ 보낼 데이터 ν•­λͺ©(μ •μˆ˜ λ˜λŠ” 포인터 κ°’)을 value 인자둜 μ§€μ •ν•˜λ©°, λ‹€μŒ νƒ€μž…μ΄λ‹€.

union sigval {
    int   sival_int;
    void *sival_ptr;
};

μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€μ—μ„œ sigaction(2)에 SA_SIGINFO ν”Œλž˜κ·Έλ₯Ό μ¨μ„œ 이 μ‹œκ·Έλ„μ— λŒ€ν•œ ν•Έλ“€λŸ¬λ₯Ό μ„€μΉ˜ν•΄ λ‘μ—ˆλ‹€λ©΄ ν•Έλ“€λŸ¬ 두 번째 인자둜 μ „λ‹¬λ˜λŠ” siginfo_t ꡬ쑰체의 si_value ν•„λ“œλ₯Ό 톡해 이 데이터λ₯Ό 얻을 수 μžˆλ‹€. λ”λΆˆμ–΄ κ·Έ ꡬ쑰체의 si_code ν•„λ“œκ°€ SI_QUEUE둜 섀정될 것이닀.

RETURN VALUE

성곡 μ‹œ sigqueue()λŠ” 0을 λ°˜ν™˜ν•˜μ—¬ μ‹œκ·Έλ„μ΄ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ„±κ³΅μ μœΌλ‘œ νμž‰ λ˜μ—ˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€. κ·Έ μ™Έμ˜ κ²½μš°μ—λŠ” -1을 λ°˜ν™˜ν•˜λ©° 였λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ errnoλ₯Ό μ„€μ •ν•œλ‹€.

ERRORS

EAGAIN
큐에 넣을 수 μžˆλŠ” μ‹œκ·Έλ„ 개수 ν•œκ³„μ— λ„λ‹¬ν–ˆλ‹€. (μžμ„Έν•œ λ‚΄μš©μ€ signal(7)을 보라.)
EINVAL
sigκ°€ μœ νš¨ν•˜μ§€ μ•Šλ‹€.
EPERM
ν”„λ‘œμ„ΈμŠ€κ°€ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹œκ·Έλ„μ„ 보낼 κΆŒν•œμ„ κ°€μ§€κ³  μžˆμ§€ μ•Šλ‹€. ν•„μš”ν•œ κΆŒν•œμ— λŒ€ν•΄μ„  kill(2)을 보라.
ESRCH
pid에 μΌμΉ˜ν•˜λŠ” PID의 ν”„λ‘œμ„ΈμŠ€κ°€ μ—†λ‹€.

VERSIONS

λ¦¬λˆ…μŠ€ 2.2μ—μ„œ sigqueue()와 기반 λ˜λŠ” rt_sigqueueinfo(2) μ‹œμŠ€ν…œ 호좜이 처음 λ“±μž₯ν–ˆλ‹€.

ATTRIBUTES

이 μ ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ“€μ— λŒ€ν•œ μ„€λͺ…은 attributes(7)λ₯Ό 보라.

μΈν„°νŽ˜μ΄μŠ€ 속성 κ°’
sigqueue() μŠ€λ ˆλ“œ μ•ˆμ „μ„± MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008.

NOTES

이 ν•¨μˆ˜λ‘œ 인해 ν˜ΈμΆœν•œ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ‹œκ·Έλ„μ„ λ³΄λ‚΄κ²Œ λ˜λŠ”λ° 호좜 μŠ€λ ˆλ“œκ°€ κ·Έ μ‹œκ·Έλ„μ„ 막고 μžˆμ§€ μ•Šμ•˜κ³ , λ‹€λ₯Έ μ–΄λ–€ μŠ€λ ˆλ“œλ„ (λΉ„μ°¨λ‹¨μœΌλ‘œ λ‘κ±°λ‚˜ sigwait(3)으둜 κΈ°λ‹€λ €μ„œ) κ·Έ μ‹œκ·Έλ„μ„ μ²˜λ¦¬ν•˜λ €λŠ” μ˜μ‚¬κ°€ μ—†μ—ˆμœΌλ©΄ 이 ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜κΈ° 전에 이 μŠ€λ ˆλ“œμ—κ²Œ 적어도 μ–΄λ–€ μ‹œκ·Έλ„μ΄ μ „λ‹¬λ˜μ–΄μ•Ό ν•œλ‹€.

C 라이브러리/컀널 차이

λ¦¬λˆ…μŠ€μ—μ„œ sigqueue()λŠ” rt_sigqueueinfo(2) μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ΄μš©ν•΄ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€. κ·Έ μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ μ„Έ 번째 μΈμžκ°€ siginfo_t ꡬ쑰체인 점이 λ‹€λ₯Έλ°, 이 ꡬ쑰체가 μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€μ˜ μ‹œκ·Έλ„ ν•Έλ“€λŸ¬μ—κ²Œ μ œκ³΅λ˜κ±°λ‚˜ μˆ˜μ‹  ν”„λ‘œμ„ΈμŠ€μ˜ sigtimedwait(2) ν˜ΈμΆœμ— μ˜ν•΄ λ°˜ν™˜λœλ‹€. glibc의 sigqueue() λž˜νΌμ—μ„œ 이 인자 uinfoλ₯Ό λ‹€μŒκ³Ό 같이 μ„€μ •ν•œλ‹€.

uinfo.si_signo = sig;      /* sigqueue()μ—κ²Œ μ€€ 인자 */
uinfo.si_code = SI_QUEUE;
uinfo.si_pid = getpid();   /* μ†‘μ‹ μžμ˜ ν”„λ‘œμ„ΈμŠ€ ID */
uinfo.si_uid = getuid();   /* μ†‘μ‹ μžμ˜ μ‹€μ œ UID */
uinfo.si_value = val;      /* sigqueue()μ—κ²Œ μ€€ 인자 */

SEE ALSO

kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️