_syscall(2) - wariua/manpages-ko GitHub Wiki
_syscall - λΌμ΄λΈλ¬λ¦¬ μ§μ μμ΄ μμ€ν νΈμΆ λΆλ₯΄κΈ° (ꡬμ)
#include <linux/unistd.h>
_syscall λ§€ν¬λ‘
μνλ μμ€ν
νΈμΆ
μμ€ν νΈμΆμ λν΄ μμμΌ ν μ€μν κ²μ΄ κ·Έ μνμ΄λ€. μΈμκ° λͺ κ°κ³ , νμ μ΄ λ¬΄μμ΄κ³ , ν¨μ λ°ν νμ μ λμ§ μμμΌ νλ€. μμ€ν μΌλ‘μ μ€μ νΈμΆμ μ½κ² λ§λ€μ΄ μ£Όλ λ§€ν¬λ‘κ° μΌκ³± κ°μ§ μλλ°, λ€μκ³Ό κ°μ ννμ΄λ€.
_syscallX(type,name,type1,arg1,type2,arg2,...)
μ¬κΈ°μ,
-
X
λ 0-6μ΄λ©° μμ€ν νΈμΆμ΄ λ°λ μΈμ κ°μμ΄λ€. -
type
μ μμ€ν νΈμΆμ λ°ν νμ μ΄λ€. -
name
μ μμ€ν νΈμΆμ μ΄λ¦μ΄λ€. -
typeN
μ N λ²μ§Έ μΈμμ νμ μ΄λ€. -
argN
μ N λ²μ§Έ μΈμμ μ΄λ¦μ΄λ€.
μ΄ λ§€ν¬λ‘λ€μ μ§μ ν μΈμλ€λ‘ name
μ΄λΌλ ν¨μλ₯Ό λ§λ λ€. μμ€ μ½λμμ κ·Έ _syscall()μ ν¬ν¨μν€κ³ λμ name
μΌλ‘ μμ€ν
νΈμΆμ λΆλ₯Έλ€.
/usr/include/linux/unistd.h
μ΄ λ§€ν¬λ‘λ₯Ό μ°λ λ°©μμ 리λ μ€ μ μ©μ΄λ©°, μ κ±° μμ μ΄λ€.
컀λ 2.6.18 μ λλΆν° μ¬μ©μ 곡κ°μ μ 곡λλ ν€λ νμΌμμ _syscall λ§€ν¬λ‘κ° μ κ±°λμλ€. λμ syscall(2)μ μ¬μ©νλΌ. (μΌλΆ μν€ν μ²λ€, νΉν ia64μμλ νλ²λ _syscall λ§€ν¬λ‘λ₯Ό μ 곡νμ§ μμλ€. κ·Έλ° μν€ν μ²μμλ νμ syscall(2)μ΄ νμνλ€.)
_syscall() λ§€ν¬λ‘λ μνμ λ§λ€μ΄ μ£Όμ§ μλλ€. νΉν C++ μ¬μ©μλ€μ μν΄μ μ§μ λ§λ€μ΄ μ€μΌ ν μλ μλ€.
μμ€ν
νΈμΆλ€μ΄ λ°λμ μμμ΄κ±°λ μμμΈ μ€λ₯ μ½λλ§ λ°νν΄μΌ νλ κ²μ΄ μλλ€. μ€λ₯λ₯Ό μ΄λ»κ² λ°ννλμ§ νμ€ν μλ €λ©΄ μμ€λ₯Ό μ½μ΄ 보μμΌ νλ€. μΌλ°μ μΌλ‘λ νμ€ μ€λ₯ μ½λμ μμ κ°, μλ₯Ό λ€μ΄ -EPERM
μ΄λ€. _syscall() λ§€ν¬λ‘λ€μ μμ€ν
νΈμΆμ κ²°κ³Ό r
μ΄ μμκ° μλ λλ r
μ λ°ννκ³ , r
μ΄ μμμΌ λλ -1μ λ°ννκ³ λ³μ errno
λ₯Ό -r
λ‘ μ€μ νκ² λλ€. μ€λ₯ μ½λλ€μ λν΄μ errno(3)λ₯Ό 보λΌ.
μμ€ν νΈμΆμ μ μν λ μΈμ νμ λ€μ κ° μ λ¬μ΄λ (ꡬ쑰체 κ°μ μ§ν© νμ μ κ²½μ°) ν¬μΈν° μ λ¬μ΄μ΄μΌ νλ€.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h> /* _syscallX λ§€ν¬λ‘/κ΄λ ¨ μ¬νλ€ */
#include <linux/kernel.h> /* struct sysinfo */
_syscall1(int, sysinfo, struct sysinfo *, info);
int
main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("code error = %d\n", error);
printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n"
"RAM: total %lu / free %lu / shared %lu\n"
"Memory in buffers = %lu\nSwap: total %lu / free %lu\n"
"Number of processes = %d\n",
s_info.uptime, s_info.loads[0],
s_info.loads[1], s_info.loads[2],
s_info.totalram, s_info.freeram,
s_info.sharedram, s_info.bufferram,
s_info.totalswap, s_info.freeswap,
s_info.procs);
exit(EXIT_SUCCESS);
}
code error = 0
uptime = 502034s
Load: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: total 15343616 / free 827392 / shared 8237056
Memory in buffers = 5066752
Swap: total 27881472 / free 24698880
Number of processes = 40
intro(2)
, syscall(2), errno(3)
2019-03-06