_syscall(2) - wariua/manpages-ko GitHub Wiki

NAME

_syscall - 라이브러리 지원 없이 μ‹œμŠ€ν…œ 호좜 λΆ€λ₯΄κΈ° (ꡬ식)

SYNOPSIS

#include <linux/unistd.h>

_syscall 맀크둜

μ›ν•˜λŠ” μ‹œμŠ€ν…œ 호좜

DESCRIPTION

μ‹œμŠ€ν…œ ν˜ΈμΆœμ— λŒ€ν•΄ μ•Œμ•„μ•Ό ν•  μ€‘μš”ν•œ 것이 κ·Έ μ›ν˜•μ΄λ‹€. μΈμžκ°€ λͺ‡ 개고, νƒ€μž…μ΄ 무엇이고, ν•¨μˆ˜ λ°˜ν™˜ νƒ€μž…μ€ λ­”μ§€ μ•Œμ•„μ•Ό ν•œλ‹€. μ‹œμŠ€ν…œμœΌλ‘œμ˜ μ‹€μ œ ν˜ΈμΆœμ„ μ‰½κ²Œ λ§Œλ“€μ–΄ μ£ΌλŠ” λ§€ν¬λ‘œκ°€ 일곱 κ°€μ§€ μžˆλŠ”λ°, λ‹€μŒκ³Ό 같은 ν˜•νƒœμ΄λ‹€.

_syscallX(type,name,type1,arg1,type2,arg2,...)

μ—¬κΈ°μ„œ,

  • XλŠ” 0-6이며 μ‹œμŠ€ν…œ 호좜이 λ°›λŠ” 인자 κ°œμˆ˜μ΄λ‹€.

  • type은 μ‹œμŠ€ν…œ 호좜의 λ°˜ν™˜ νƒ€μž…μ΄λ‹€.

  • name은 μ‹œμŠ€ν…œ 호좜의 이름이닀.

  • typeN은 N 번째 인자의 νƒ€μž…μ΄λ‹€.

  • argN은 N 번째 인자의 이름이닀.

이 λ§€ν¬λ‘œλ“€μ€ μ§€μ •ν•œ μΈμžλ“€λ‘œ nameμ΄λΌλŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“ λ‹€. μ†ŒμŠ€ μ½”λ“œμ—μ„œ κ·Έ _syscall()을 ν¬ν•¨μ‹œν‚€κ³  λ‚˜μ„œ name으둜 μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ λΆ€λ₯Έλ‹€.

FILES

/usr/include/linux/unistd.h

CONFORMING TO

이 맀크둜λ₯Ό μ“°λŠ” 방식은 λ¦¬λˆ…μŠ€ μ „μš©μ΄λ©°, 제거 μ˜ˆμ •μ΄λ‹€.

NOTES

컀널 2.6.18 정도뢀터 μ‚¬μš©μž 곡간에 μ œκ³΅λ˜λŠ” 헀더 νŒŒμΌμ—μ„œ _syscall λ§€ν¬λ‘œκ°€ μ œκ±°λ˜μ—ˆλ‹€. λŒ€μ‹  syscall(2)을 μ‚¬μš©ν•˜λΌ. (일뢀 μ•„ν‚€ν…μ²˜λ“€, 특히 ia64μ—μ„œλŠ” ν•œλ²ˆλ„ _syscall 맀크둜λ₯Ό μ œκ³΅ν•˜μ§€ μ•Šμ•˜λ‹€. 그런 μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 항상 syscall(2)이 ν•„μš”ν–ˆλ‹€.)

_syscall() λ§€ν¬λ‘œλŠ” μ›ν˜•μ„ λ§Œλ“€μ–΄ μ£Όμ§€ μ•ŠλŠ”λ‹€. 특히 C++ μ‚¬μš©μžλ“€μ„ μœ„ν•΄μ„œ 직접 λ§Œλ“€μ–΄ μ€˜μ•Ό ν•  μˆ˜λ„ μžˆλ‹€.

μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ΄ λ°˜λ“œμ‹œ μ–‘μˆ˜μ΄κ±°λ‚˜ 음수인 였λ₯˜ μ½”λ“œλ§Œ λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. 였λ₯˜λ₯Ό μ–΄λ–»κ²Œ λ°˜ν™˜ν•˜λŠ”μ§€ ν™•μ‹€νžˆ μ•Œλ €λ©΄ μ†ŒμŠ€λ₯Ό 읽어 보아야 ν•œλ‹€. μΌλ°˜μ μœΌλ‘œλŠ” ν‘œμ€€ 였λ₯˜ μ½”λ“œμ˜ 음수 κ°’, 예λ₯Ό λ“€μ–΄ -EPERM이닀. _syscall() λ§€ν¬λ‘œλ“€μ€ μ‹œμŠ€ν…œ 호좜의 κ²°κ³Ό r이 μŒμˆ˜κ°€ 아닐 λ•ŒλŠ” r을 λ°˜ν™˜ν•˜κ³ , r이 음수일 λ•ŒλŠ” -1을 λ°˜ν™˜ν•˜κ³  λ³€μˆ˜ errnoλ₯Ό -r둜 μ„€μ •ν•˜κ²Œ λœλ‹€. 였λ₯˜ μ½”λ“œλ“€μ— λŒ€ν•΄μ„  errno(3)λ₯Ό 보라.

μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ •μ˜ν•  λ•Œ 인자 νƒ€μž…λ“€μ€ κ°’ μ „λ‹¬μ΄λ‚˜ (ꡬ쑰체 같은 μ§‘ν•© νƒ€μž…μ˜ 경우) 포인터 전달이어야 ν•œλ‹€.

EXAMPLE

#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

SEE ALSO

intro(2), syscall(2), errno(3)


2019-03-06

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