getcontext(3) - wariua/manpages-ko GitHub Wiki
getcontext, setcontext - μ¬μ©μ λ¬Έλ§₯ μ»κ±°λ μ€μ νκΈ°
#include <ucontext.h>
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);
μμ€ν
V κ³μ΄ νκ²½μμλ <ucontext.h>
μ mcontext_t
μ ucontext_t
λΌλ λ κ°μ§ νμ
μ΄ μμΌλ©° λ€ κ°μ§ ν¨μ getcontext()
, setcontext()
, makecontext(3), swapcontext(3)λ₯Ό ν΅ν΄ ν νλ‘μΈμ€ λ΄μ μ¬λ¬ μ μ΄ μ€λ λλ€ μ¬μ΄μμ μ¬μ©μ μμ€ λ¬Έλ§₯ μ νμ΄ κ°λ₯νλ€.
mcontext_t
νμ
μ μ₯μΉ μμ‘΄μ μ΄λ©° λ΄μ©μ΄ κ°μΆ°μ Έ μλ€. ucontext_t
νμ
μ μ΅μν λ€μ νλλ€μ κ°μ§κ³ μλ ꡬ쑰체μ΄λ€.
typedef struct ucontext_t {
struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
...
} ucontext_t;
sigset_t
μ stack_t
λ <signal.h>
μ μ μλμ΄ μλ€. μ¬κΈ°μ uc_link
λ νμ¬ λ¬Έλ§₯μ΄ μ’
λ£λμμ λ μ¬κ°λ λ¬Έλ§₯μ κ°λ¦¬ν€λ©° (νμ¬ λ¬Έλ§₯μ makecontext(3)μΌλ‘ λ§λ κ²½μ°), uc_sigmask
λ μ΄ λ¬Έλ§₯μμ μ°¨λ¨λ μκ·Έλλ€μ μ§ν©μ΄κ³ (sigprocmask(2) μ°Έκ³ ), uc_stack
μ μ΄ λ¬Έλ§₯μμ μ¬μ©νλ μ€νμ΄κ³ (sigaltstack(2) μ°Έκ³ ), uc_context
λ μ μ₯λ λ¬Έλ§₯μ μ₯μΉλ³ ννμΌλ‘ νΈμΆ μ€λ λμ μ₯μΉ λ μ§μ€ν°λ€μ΄ ν¬ν¨λλ€.
getcontext()
ν¨μλ ucp
κ° κ°λ¦¬ν€λ ꡬ쑰체λ₯Ό νμ¬μ νμ± λ¬Έλ§₯μΌλ‘ μ΄κΈ°ν νλ€.
setcontext()
ν¨μλ ucp
κ° κ°λ¦¬ν€λ μ¬μ©μ λ¬Έλ§₯μ 볡μνλ€. νΈμΆ μ±κ³΅ μ λ°ννμ§ μλλ€. κ·Έ λ¬Έλ§₯μ getcontext()
λ makecontext(3) νΈμΆλ‘ μ»μ κ²μ΄κ±°λ μκ·Έλ νΈλ€λ¬μ μΈ λ²μ§Έ μΈμλ‘ μ λ¬λ κ²μ΄μ΄μΌ νλ€.
getcontext()
νΈμΆλ‘ μ»μ λ¬Έλ§₯μΈ κ²½μ° κ·Έ νΈμΆμ΄ λ°©κΈ λ°νν κ²μ²λΌ νλ‘κ·Έλ¨ μ€νμ΄ μ΄μ΄μ§λ€.
makecontext(3) νΈμΆλ‘ μ»μ λ¬Έλ§₯μΈ κ²½μ° makecontext(3) νΈμΆ λ λ²μ§Έ μΈμλ‘ μ§μ νλ ν¨μ func
νΈμΆλ‘ νλ‘κ·Έλ¨ μ€νμ΄ μ΄μ΄μ§λ€. func
ν¨μκ° λ°ννλ©΄ makecontext(3) νΈμΆ 첫 λ²μ§Έ μΈμλ‘ μ§μ νλ ucp
ꡬ쑰체μ uc_link
λ©€λ²λ‘ κ³μ μ§ννλ€. κ·Έ λ©€λ²κ° NULLμ΄λ©΄ μ€λ λκ° λλλ€.
μκ·Έλ νΈλ€λ¬ νΈμΆλ‘ μ»μ λ¬Έλ§₯μΈ κ²½μ°μ μ΄μ νμ€ λ¬Έμμμλ "μκ·Έλλ‘ μ€λ¨λ μΈμ€νΈλμ λ€μμ νλ‘κ·Έλ¨ μΈμ€νΈλμ μΌλ‘ νλ‘κ·Έλ¨ μ€νμ΄ μ΄μ΄μ§λ€"κ³ λμ΄ μμλ€. νμ§λ§ SUSv2μμ μ΄ λ¬Έμ₯μ΄ μ κ±°λμκ³ νμ¬ νμ μ "κ·Έ κ²°κ³Όκ° λͺ μΈλμ΄ μμ§ μμ"μ΄λ€.
μ±κ³΅ μ getcontext()
λ 0μ λ°ννλ©° setcontext()
λ λ°ννμ§ μλλ€. μ€λ₯ μ λ λͺ¨λ -1μ λ°ννλ©° errno
λ₯Ό μ μ ν μ€μ νλ€.
μ μλμ΄ μμ§ μμ.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
getcontext() , setcontext()
|
μ€λ λ μμ μ± | MT-Safe race:ucp |
SUSv2, POSIX.1-2001, POSIX.1-2008μμ μ΄μμ± λ¬Έμ λ₯Ό μ΄μ λ‘ getcontext()
λͺ
μΈλ₯Ό μ κ±°νμμΌλ©° λμ POSIX μ€λ λλ₯Ό μ¬μ©νκ² μμ©μ μ¬μμ±νκΈ°λ₯Ό κΆκ³ νκ³ μλ€.
μ΄ λ©μ»€λμ¦μ΄ κ°μ₯ λ¨Όμ ꡬ체νλ κ²μ setjmp(3)/longjmp(3) λ©μ»€λμ¦μ΄μλ€. κ·Έ λ©μ»€λμ¦μμλ μκ·Έλ λ¬Έλ§₯ μ²λ¦¬λ₯Ό κ·μ νμ§ μμκ³ , κ·Έλμ λ€μ λ¨κ³κ° sigsetjmp(3)/siglongjmp(3) μμ΄μλ€. κ·Έλ¦¬κ³ νμ¬ λ©μ»€λμ¦μμλ ν¨μ¬ λ μ μ°ν μ μ΄κ° κ°λ₯νλ€. ννΈμΌλ‘ getcontext()
μμ λ°νλ κ²μ΄ μ²μ νΈμΆμμ λμμ¨ κ²μΈμ§ setcontext()
νΈμΆμ ν΅ν κ²μΈμ§ μμλΌ μμ¬μ΄ λ°©λ²μ΄ μλ€. μ¬μ©μκ° λ°λ‘ νμΈ λ°©μμ κ³ μν΄μΌ νλλ°, λ μ§μ€ν°λ€μ΄ 볡μλλ―λ‘ λ μ§μ€ν° λ³μλ μ¬μ©ν μ μλ€.
μκ·Έλμ΄ λ°μνμ λ 컀λμ΄ νμ¬ μ¬μ©μ λ¬Έλ§₯μ μ μ₯νκ³ μκ·Έλ νΈλ€λ¬λ₯Ό μν μ λ¬Έλ§₯μ λ§λ λ€. νΈλ€λ¬μμ longjmp(3)μ μ¬μ©νλλ‘ λλ¬μ μ λλ€. λ¬Έλ§₯κ³Ό κ΄λ ¨ν΄ μ΄λ»κ² λ μ§ κ·μ λμ΄ μμ§ μλ€. λμ siglongjmp(3)λ setcontext()
λ₯Ό μ¬μ©νλΌ.
sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), makecontext(3), sigsetjmp(3)
2017-09-15