Rechercher une page de manuel
intro
Langue: ja
Version: 1996-05-22 (openSuse - 09/10/07)
Section: 2 (Appels système)
̾Á°
intro, _syscall - ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÀâÌÀÀâÌÀ
¤³¤Î¾Ï¤Ï Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤òµ½Ò¤·¤Æ¤¤¤ë¡£ Linux 2.0 ¤Ç¤Ï 164 ¸Ä¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬Â¸ºß¤¹¤ë¡£ syscall(2) ¤ò»²¾È¤Î¤³¤È¡£Ä¾ÀܸƤӽФ¹
¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢Ä¾ÀÜ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¸Æ¤Ó½Ð¤¹É¬ÍפϤʤ¤¤¬¡¢ ¾ì¹ç¤Ë¤è¤Ã¤Æ¤Ïɸ½à C ¥é¥¤¥Ö¥é¥ê¤ËŬÀڤʴؿô¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤â¤¢¤ë¡£ ¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ï¡¢¥×¥í¥°¥é¥Þ¡¼¤Ï¡¢_syscall ¥Þ¥¯¥í¤« syscall() ¤Î¤¤¤º¤ì¤«¤ò»È¤Ã¤Æ¡¢¼«Ê¬¤Ç¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¸Æ¤Ó½Ð¤µ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ syscall() ¤ò»È¤¦ÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï syscall(2) ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï _syscall ¥Þ¥¯¥í¤Ë¤Ä¤¤¤ÆÀâÌÀ¤¹¤ë¡£ ¤Þ¤¿¡¢¤¤¤Ä¤É¤Á¤é¤Î»ÅÁȤߤò»È¤¦¤Ù¤¤«¤Ë¤Ä¤¤¤Æ¤â½Ò¤Ù¤ë¡£½ñ¼°
#include <linux/unistd.h>A _syscall macro
desired system call
ÀßÄê
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ë´Ø¤·¤Æ¤½¤Î¥×¥í¥È¥¿¥¤¥×¤òÃΤ뤳¤È¤¬½ÅÍ×¤Ç ¤¢¤ë¡£°ú¤¿ô¤Î¸Ä¿ô¡¢¤½¤ì¤é¤Î·¿¡¢¤½¤·¤ÆÊÖ¤êÃͤη¿¤òÃΤé¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¼ÂºÝ¤Î»ÈÍѤˤ¢¤¿¤Ã¤Æ¤Ï¡¢¤è¤êÍưפ˥·¥¹¥Æ¥à¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤Ë¼¡¤Î 6 ¸Ä¤Î ¥Þ¥¯¥í¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡£¤½¤Î·Á¼°¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:- _syscallX(type,name,type1,arg1,type2,arg2,...)
-
-
- X ¤Ï 0-5 ¤ÎÃͤǡ¢¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬É¬ÍפȤ¹¤ë°ú¤¿ô¤Î¿ô¤Ç¤¢¤ë¡£
- type ¤Ï¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÊÖ¤êÃͤη¿¤Ç¤¢¤ë¡£
- name ¤Ï¥·¥¹¥Æ¥à¥³¡¼¥ë¤Î̾Á°¤Ç¤¢¤ë¡£
- typeN ¤Ï N ÈÖÌܤΰú¤¿ô¤Î·¿¤Ç¤¢¤ë¡£
- argN ¤Ï N ÈÖÌܤΰú¤¿ô¤Î̾Á°¤Ç¤¢¤ë¡£
-
¤³¤ì¤é¤Î¥Þ¥¯¥í¤Ï¡¢»ØÄꤷ¤¿°ú¤¿ô¤ò»ý¤Ä name ¤È¤¤¤¦Ì¾Á°¤Î´Ø¿ô¤òÀ¸À®¤¹¤ë¡£ °ìÅÙ¥½¡¼¥¹¥Õ¥¡¥¤¥ëÃæ¤Ç¤³¤Î _syscall() ¥Þ¥¯¥í¤ò¸Æ¤ó¤Ç¤ª¤¯¤È¡¢ name ¤Ç¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¸Æ¤Ö¤³¤È¤¬¤Ç¤¤ë¡£
¥Õ¥¡¥¤¥ë
/usr/include/linux/unistd.h½àµò
¤³¤Î¥»¥¯¥·¥ç¥ó¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬½àµò¤¹¤ë Unix ¤Î¼ïÊ̤äɸ½àµ¬³Ê¤ò ɽ¤¹¤¿¤á¤Ë¡¢°Ê²¼¤Îά¹æ¤ò»ÈÍѤ¹¤ë¡£ standards(7) ¤ò»²¾È¡£Ãí°Õ
_syscall() ¥Þ¥¯¥í¤Ï¥×¥í¥È¥¿¥¤¥×¤òÀ¸À®¤·¤Ê¤¤¡£¥æ¡¼¥¶¡¼¤Ï¼«Ê¬¤Ç ¥×¥í¥È¥¿¥¤¥×¤ò½ñ¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£- C++ ¥æ¡¼¥¶¡¼¤Î¾ì¹ç¤ÏÆä˽ÅÍפǤ¢¤ë¡£
¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÀµ¤Î¥¨¥é¡¼¥³¡¼¥É¤Î¤ß¤Þ¤¿¤ÏÉé¤Î¥¨¥é¡¼¥³¡¼¥É¤Î¤ß¤ò ÊÖ¤¹¤³¤È¤¬Äê¤á¤é¤ì¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£ ¤½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬¤É¤Î¤è¤¦¤Ê¥¨¥é¡¼¥³¡¼¥É¤òÊÖ¤¹¤«¤Ë¤Ä¤¤¤Æ³Îǧ¤¹¤ë ¤¿¤á¤Ë¤Ï¤½¤Î¥½¡¼¥¹¥³¡¼¥É¤òÆɤàɬÍפ¬¤¢¤ë¡£ ¤¿¤¤¤Æ¤¤¤Î¾ì¹ç¡¢É¸½à¤Î¥¨¥é¡¼¥³¡¼¥É¤ÎÉé¤ÎÃÍ (Î㤨¤Ð -EPERM ¤Î¤è¤¦¤Ê) ¤òÊÖ¤¹¡£ _syscall() ¥Þ¥¯¥í¤Ï¡¢¤½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÎÊÖ¤êÃÍ r ¤¬Éé¤Ç¤Ê¤¤¾ì¹ç¡¢ ¤½¤ÎÃͤò¤½¤Î¤Þ¤ÞÊÖ¤¹¡£Éé¤Î¾ì¹ç¤Ë¤ÏÊÑ¿ô errno ¤Ë -r ¤òÀßÄꤷ¤Æ -1 ¤òÊÖ¤¹¡£ ³Æ¥¨¥é¡¼¥³¡¼¥É¤Ë´Ø¤·¤Æ¤Ï errno(3) ¤ò»²¾È¡£
(mmap(2) ¤Ê¤É¤Î) ¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï 5¸Ä¤è¤ê¿¤¯¤Î°ú¤¿ô¤òÍ׵᤹¤ë¡£ ¤³¤¦¤¤¤Ã¤¿¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¥¹¥¿¥Ã¥¯¤Ë°ú¤¿ô¤ò¥×¥Ã¥·¥å¤·¡¢ ¤½¤Î°ú¤¿ô¤Î¤«¤¿¤Þ¤ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÅϤ·¤Æ½èÍý¤µ¤ì¤ë¡£
¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÄêµÁ¤¹¤ë¾ì¹ç¡¢¤½¤Î°ú¤¿ô¤Î·¿¤ÏÃÍÅϤ· (by-value) ¤«¡¢ (¹½Â¤ÂΤΤ褦¤Ê½¸¹çŪ¤Ê¥Ç¡¼¥¿¤Î¾ì¹ç¤Ï) ¥Ý¥¤¥ó¥¿ÅϤ· (by-pointer) ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
glibc ¤¬¤Þ¤ÀÃΤé¤Ê¤¤¥·¥¹¥Æ¥à¥³¡¼¥ë¤òµ¯Æ°¤¹¤ë¤Î¤Ë¹¥¤Þ¤·¤¤ÊýË¡¤Ï syscall(2) ¤ò»È¤¦¤³¤È¤Ç¤¢¤ë¡£¤·¤«¤·¤Ê¤¬¤é¡¢¤³¤Î»ÅÁȤߤòÍøÍѤǤ¤ë¤Î¤Ï¡¢ syscall(2) ¤ËÂбþ¤·¤¿ libc (glibc ¤Ê¤É) ¤ò»È¤Ã¤Æ¤ª¤ê¡¢ ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë <sys/syscall.h> ¤ËɬÍ×¤Ê SYS_foo ¤ÎÄêµÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤À¤±¤Ç¤¢¤ë¡£ ¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢_syscall ¥Þ¥¯¥í¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ë¡£
¤¤¤¯¤Ä¤«¤Î¥¢¡¼¥¥Æ¥¯¥Á¥ã¡¢ÆÃ¤Ë ia64¡¢¤Ç¤Ï _syscall ¥Þ¥¯¥í¤Ï Ä󶡤µ¤ì¤Æ¤¤¤Ê¤¤¡£¤³¤Î¤è¤¦¤Ê¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ç¤Ï syscall(2) ¤ò»È¤ï¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
Îã
#include <stdio.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); /* Ãí°Õ¡§ nroff ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤«¤éľÀÜ¥³¥Ô¡¼¤¹¤ë¤È¤¤Ï printf ʸ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë;ʬ¤Ê¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤ò½üµî¤¹¤ë ¤³¤È¤ò˺¤ì¤Ê¤¤¤è¤¦¤Ë */ 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
´ØÏ¢¹àÌÜ
syscall(2), errno(3), feature_test_macros(7)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre