Man page - _syscall(2)

Packages contains this manual

Available languages:

en fr it ja ru ro

Manual

_SYSCALL

名 前
書 åŧ
čĒŦ 明
フ ã‚Ą イ ãƒĢ
æē– 拠
æŗ¨ 意
例
å‡ē 力 例
é–ĸ 逪 項 į›Ž
こ ぎ 文 書 ãĢ つ い ãĻ

名 前

_syscall - ナ イ ブ ナ ãƒĒ ぎ ã‚ĩ ポ ãƒŧ ト ãĒ し で ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ を čĩˇ 動 す る (昔 ぎ æ–š æŗ• )

書 åŧ

#include <linux/unistd.h>

A _syscall macro

desired system call

čĒŦ 明

ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ ãĢ é–ĸ し ãĻ そ ぎ プ ロ ト ã‚ŋ イ プ を įŸĨ る こ と が 重 čρ で あ る 。 åŧ• 数 ぎ 個 数 、 そ れ ら ぎ 型 、 čŋ” り 値 ぎ 型 を įŸĨ る åŋ… čρ が あ る 。 原 際 ぎ äŊŋ ᔍ ãĢ あ た ãŖ ãĻ は 、 ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ を ã‚ˇ ゚ テ ム ãĢ å‘ŧ ãŗ å‡ē し や す く す る た め ãĢ 、 7 個 ぎ マ ク ロ が ᔍ 意 さ れ ãĻ い る 。 こ れ ら ぎ マ ク ロ は äģĨ 下 ぎ åŊĸ で あ る 。

_syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...)

こ こ で

X は 0〜 6 で 、 ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ が 取 る åŧ• 数 ぎ 個 数 で あ る 。

type は ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ ぎ čŋ” り 値 ぎ 型 で あ る 。

name は ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ ぎ 名 前 で あ る 。

typeN は N į•Ē į›Ž ぎ åŧ• 数 ぎ 型 で あ る 。

argN は N į•Ē į›Ž ぎ åŧ• 数 ぎ 名 前 で あ る 。

こ れ ら ぎ マ ク ロ は 、 指 厚 し た åŧ• 数 を 持 つ name と い う 名 前 ぎ é–ĸ 数 を į”Ÿ 成 す る 。 一 åēĻ ã‚Ŋ ãƒŧ ゚ フ ã‚Ą イ ãƒĢ ぎ 中 で _syscall() を イ ãƒŗ ク ãƒĢ ãƒŧ ド し ãĻ お く と 、 そ ぎ ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ を name と い う 名 前 で å‘ŧ ãļ こ と が で き る 。

フ ã‚Ą イ ãƒĢ

/usr/include/linux/unistd.h

æē– 拠

こ れ ら ぎ マ ク ロ は Linux å›ē 有 で あ り 、 そ ぎ äŊŋ ᔍ は 非 推 åĨ¨ で あ る 。

æŗ¨ 意

ã‚Ģ ãƒŧ ネ ãƒĢ 2.6.18 あ た り か ら 、 _syscall マ ク ロ įž¤ は ãƒĻ ãƒŧ ã‚ļ ãƒŧ įŠē 間 ãĢ 寞 し ãĻ 提 供 さ れ る ヘ ッ ダ ãƒŧ フ ã‚Ą イ ãƒĢ か ら 削 除 さ れ た 。 äģŖ ã‚ り ãĢ syscall (2) を äŊŋ ᔍ す る こ と 。 (い く つ か ぎ ã‚ĸ ãƒŧ キ テ ク チ ãƒŖ ãƒŧ 、 į‰š ãĢ ia64、 で は 、 こ れ ぞ で _syscall マ ク ロ が 提 供 さ れ た こ と は ãĒ い 。 こ ぎ よ う ãĒ ã‚ĸ ãƒŧ キ テ ク チ ãƒŖ ãƒŧ で は 、 常 ãĢ syscall (2) が åŋ… čρ で あ ãŖ た 。 )

_syscall() マ ク ロ は プ ロ ト ã‚ŋ イ プ を 「 į”Ÿ 成 し ãĒ い 」 。 ãƒĻ ãƒŧ ã‚ļ ãƒŧ は プ ロ ト ã‚ŋ イ プ を č‡Ē 分 で 書 か ãĒ け れ ば ãĒ ら ãĒ い か も し れ ãĒ い 。 と り わ け C++ ãƒĻ ãƒŧ ã‚ļ ãƒŧ ぎ å ´ 合 は そ う で あ ろ う 。

ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ は 、 æ­Ŗ ぎ エ ナ ãƒŧ ã‚ŗ ãƒŧ ド ぎ ãŋ 、 ぞ た は 負 ぎ エ ナ ãƒŧ ã‚ŗ ãƒŧ ド ぎ ãŋ を čŋ” す よ う ãĢ 厚 め ら れ ãĻ い る 荺 で は ãĒ い 。 そ ぎ ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ が お ぎ よ う ãĒ エ ナ ãƒŧ ã‚ŗ ãƒŧ ド を čŋ” す か を įĸē čĒ す る ãĢ は 、 そ ぎ ã‚Ŋ ãƒŧ ゚ ã‚ŗ ãƒŧ ド を čĒ­ む åŋ… čρ が あ る 。 た い ãĻ い ぎ å ´ 合 は 、 標 æē– ぎ エ ナ ãƒŧ ã‚ŗ ãƒŧ ド を 負 ãĢ し た も ぎ で あ る (例 え ば - EPERM )。 _syscall() マ ク ロ は 、 そ ぎ ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ ぎ čŋ” り 値 r が 負 で ãĒ い å ´ 合 、 そ ぎ 値 を そ ぎ ぞ ぞ čŋ” す 。 一 æ–š 、 r が 負 ぎ å ´ 合 ãĢ は 、 変 数 errno ãĢ - r を 設 厚 し 、 -1 を čŋ” す 。 エ ナ ãƒŧ ã‚ŗ ãƒŧ ド ãĢ つ い ãĻ は errno (3) を 参 į…§ 。

ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ を 厚 įžŠ す る 際 、 åŧ• 数 ぎ 型 は 値 æ¸Ą し (by-value) か 、 (構 造 äŊ“ ぎ よ う ãĢ 集 合 įš„ ãĒ デ ãƒŧ ã‚ŋ ぎ å ´ 合 は ) ポ イ ãƒŗ ã‚ŋ ãƒŧ æ¸Ą し (by-pointer) で ãĒ け れ ば ãĒ ら ãĒ い 。

例

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h> /* for _syscallX macros/related stuff */
#include <linux/kernel.h> /* for 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)

こ ぎ 文 書 ãĢ つ い ãĻ

こ ぎ man ペ ãƒŧ ジ は Linux man-pages プ ロ ジ ェ ク ト ぎ ãƒĒ ãƒĒ ãƒŧ ゚ 5.10 ぎ 一 部 で あ る 。 プ ロ ジ ェ ク ト ぎ čĒŦ 明 と バ グ å ą 告 ãĢ é–ĸ す る 情 å ą は https://www.kernel.org/doc/man-pages/ ãĢ 書 か れ ãĻ い る 。