other versions
_SYSCALL(2) | Linux Programmer's Manual | _SYSCALL(2) |
名前¶
_syscall - ライブラリのサポートなしでシステムコールを起動する (昔の方法)書式¶
#include <linux/unistd.h>説明¶
システムコールに関してそのプロトタイプを知ることが重要である。 引き数の個数、それらの型、返り値の型を知る必要がある。 実際の使用にあたっては、システムコールをシステムに呼び出しやすくするために、 7 個のマクロが用意されている。これらのマクロは以下の形である。_syscallX(type,name,type1,arg1,type2,arg2,...)
ここで
- X は 0〜6 で、システムコールが取る引き数の個数である。
- type はシステムコールの返り値の型である。
- name はシステムコールの名前である。
- typeN は N 番目の引き数の型である。
- argN は N 番目の引き数の名前である。
ファイル¶
/usr/include/linux/unistd.h準拠¶
これらのマクロは Linux 固有であり、その使用は非推奨である。注意¶
カーネル 2.6.18 あたりから、_syscall マクロ群はユーザ空間に対して提供される ヘッダファイルから削除された。代わりに syscall(2) を使用すること。 (いくつかのアーキテクチャ、特に ia64、では、これまで _syscall マクロが 提供されたことはない。このようなアーキテクチャでは、常に syscall(2) が必要であった。)例¶
#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); /* Note: 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); }
Sample Output¶
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 プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2007-12-19 | Linux |