JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... の機能検査マクロの要件 ( feature_test_macros (7) 参照): syscall (): glibc 2.19 以降: _DEFAULT_SOURCE glibc 2.19 より前: _BSD_SOURCE || _SVID_SOURCE 説明 syscall () は、システムコールを起 ... さなライブラリ関数で、 number で指定されたアセンブリ言語インターフェースのシステムコールを、指定された引数をつけて実行する。 syscall () が役に立つのは、例えば C ライブラリにラッパー関数が存在しないシステムコールを呼び出したい場合である。 syscall () は、シ ... スターを復元し、システムコールが返したエラーを errno (3) に格納する。 システムコールのシンボル定数は、ヘッダーファイル < sys/syscall.h > に書かれている。 返り値 返り値は呼び出されたシステムコールによって定義される。 一般に、返り値 0 は成功を表す。 -1 はエ ... ... ibc のラッパー関数はない。「注意」の節を参照。 説明 restart_syscall () システムコールは、 シグナル ( SIGSTOP や SIGTSTP など) によって停止されたプロセスが SIGCONT シグナルを受信して再開された ... 後に、 特定のシステムコールを再開するのに使用される。 このシステムコールはカーネル内部での利用のみを想定している。 restart_syscall () は、 再開時に時刻関連のパラメーターを調整する必要があるシステムコールを再開させる場合にのみ使用される。 概要するシステム ... )、 FUTEX_WAIT (Linux 2.6.22 以降) や FUTEX_WAIT_BITSET (Linux 2.6.31 以降) 操作を利用した場合の futex (2) である。 restart_syscall () は、 中断されたシステムコールを、 経過した時間 (プロセスがシグナルにより停止されていた時間も含む) を考慮に入れて適切に調 ... ... っては、システムコールをシステムに呼び出しやすくするために、 7 個のマクロが用意されている。これらのマクロは以下の形である。 _syscall X ( type , name , type1 , arg1 , type2 , arg2 ,...) ここで X は 0〜6 で、システムコールが取る引数の個数である。 type はシス ... 番目の引数の名前である。 これらのマクロは、指定した引数を持つ name という名前の関数を生成する。 一度ソースファイルの中で _syscall() をインクルードしておくと、 そのシステムコールを name という名前で呼ぶことができる。 ファイル /usr/include/linux/unistd.h ... 準拠 これらのマクロは Linux 固有であり、その使用は非推奨である。 注意 カーネル 2.6.18 あたりから、_syscall マクロ群はユーザー空間に対して提供される ヘッダーファイルから削除された。代わりに syscall (2) を使用すること。 (いくつかの ... ... lder kernels where this system call still exists, it is available only if the kernel was configured with the CONFIG_SYSCTL_SYSCALL option. Furthermore, glibc does not provide a wrapper for this system call, necessitating the use of syscall (2). バグ オブ ... 書き込むことでオペーレーティングシステムを変えることはできない。 例 #define _GNU_SOURCE #include < unistd.h > #include < sys/syscall.h > #include < string.h > #include < stdio.h > #include < stdlib.h > #include < linux/sysctl.h > int _sysctl(struct __sysc ... args.nlen = sizeof(name)/sizeof(name[0]); args.oldval = osname; args.oldlenp = &osnamelth; osnamelth = sizeof(osname); if (syscall(SYS__sysctl, &args) == -1) { perror("_sysctl"); exit(EXIT_FAILURE); } printf("This machine is running %*s\n", osnamelth, o ... ... lder kernels where this system call still exists, it is available only if the kernel was configured with the CONFIG_SYSCTL_SYSCALL option. Furthermore, glibc does not provide a wrapper for this system call, necessitating the use of syscall (2). バグ オブ ... 書き込むことでオペーレーティングシステムを変えることはできない。 例 #define _GNU_SOURCE #include < unistd.h > #include < sys/syscall.h > #include < string.h > #include < stdio.h > #include < stdlib.h > #include < linux/sysctl.h > int _sysctl(struct __sysc ... args.nlen = sizeof(name)/sizeof(name[0]); args.oldval = osname; args.oldlenp = &osnamelth; osnamelth = sizeof(osname); if (syscall(SYS__sysctl, &args) == -1) { perror("_sysctl"); exit(EXIT_FAILURE); } printf("This machine is running %*s\n", osnamelth, o ... ... をあてて説明し、システムコールでの差分については「注意」のセクションに説明がある。 Linux のシステムコールのリストについては syscalls (2) を参照のこと。 返り値 エラーの場合、ほとんどのシステムコールは負のエラー番号を返す (具体的には errno (3) で説明されて ... 出す必要はないが、 場合によっては標準 C ライブラリに適切な関数が実装されていないこともある。 このような場合は、プログラマは syscall (2) を使って、自分でシステムコールを呼び出さなければならない。 過去には、 _syscall (2) マクロの一つを使ってシステムコールの ... 各マニュアルページのソースのヘッダーを参照すること。 これらはページごとに異なる可能性があることに注意してほしい。 関連項目 _syscall (2), syscall (2), syscalls (2), errno (3), intro (3), capabilities (7), credentials (7), feature_test_macros (7), mq_overv ... ... 注意が必要である。 x86 システムでは、 システムコールを呼び出す推奨される方法を判定するのに使用される vDSO 関数は "__kernel_vsyscall" という名前だが、 x86=64 では、 "vsyscall" という用語は、 カーネルに時刻はいつかや呼び出し元はどの CPU 上にいるかを問い合わ ... o-libc" 攻撃 を防ぐためにセキュリティ上の理由から行われる。 アーキテクチャーによっては AT_SYSINFO タグもある。 このタグは vsyscall エントリーポイントの場所を知るためだけのものであり、 しばしば省略されるか (利用できない場合は) 0 にセットされる。 このタグ ... um) 関数 以下のテーブルは vDSO で公開されるシンボルの一覧である。 シンボル バージョン __kernel_sigtramp LINUX_2.5 __kernel_syscall_via_break LINUX_2.5 __kernel_syscall_via_epc LINUX_2.5 The Itanium port is somewhat tricky. In addition to the vDSO above, ... ... , and then setting errno appropriately after the system call has returned. (These are the same steps that are performed by syscall (2), which can be used to invoke system calls for which no wrapper function is provided.) Note: system calls indicate a fa ... re by returning a negative error number to the caller on architectures without a separate error register/flag, as noted in syscall (2); when this happens, the wrapper function negates the returned error number (to make it positive), copies it to errno , ... ITY oldfstat (2) 1.0 oldlstat (2) 1.0 oldolduname (2) 1.0 oldstat (2) 1.0 oldumount (2) 2.4.116 Name of the old umount (2) syscall on Alpha olduname (2) 1.0 open (2) 1.0 open_by_handle_at (2) 2.6.39 open_tree (2) 5.2 openat (2) 2.6.16 openat2 (2) 5.6 or ... ... る。 バージョン Linux 3.16 以降では、これらのシステムコールのサポートは任意となり、利用できるかはカーネルが CONFIG_SGETMASK_SYSCALL オプションを有効にしてコンパイルされているかに依存する。 準拠 これらのシステムコールは Linux 固有である。 注意 glibc はこれ ... らの古いシステムコールに対するラッパー関数を提供していない。 あまりないと思うが、これらを呼び出したい場合には syscall (2) を使うこと。 これらのシステムコールは、 31 より大きいシグナル番号 (つまり、リアルタイムシグナル) を扱えない。 これらの ... ... る。 バージョン Linux 3.16 以降では、これらのシステムコールのサポートは任意となり、利用できるかはカーネルが CONFIG_SGETMASK_SYSCALL オプションを有効にしてコンパイルされているかに依存する。 準拠 これらのシステムコールは Linux 固有である。 注意 glibc はこれ ... らの古いシステムコールに対するラッパー関数を提供していない。 あまりないと思うが、これらを呼び出したい場合には syscall (2) を使うこと。 これらのシステムコールは、 31 より大きいシグナル番号 (つまり、リアルタイムシグナル) を扱えない。 これらの ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。