質問: C言語のプログラムで、以下の1行でコンパイルエラーが発生してしまいます。 ネットで調べてみても、よくわかりませんでした・・・。 コードとエラーを以下に示します。 コード ``` _syscall1(int, _sysctl, struct __sysctl_args *, args); ``` エラー ``` error: unknown type name ‘_sysctl’; did you mean ‘si_syscall’? ``` コードの意味するところと、どのように修正すればいいのかを、ご存じの方がおりましたら教えて頂けないでしょうか。
回答: `_syscall1` は Linux においてシステムコールを補助するマクロです。 それを用いて `_sysctl` (これも Linux に固有のものです) というシステムコールをしようとしています。 そしてコンパイラは `_sysctl` というものを知らないとしてエラーになっています。 このエラーが発生する原因としては以下のようなものが考えられます。 * Linux 用の開発環境が構築できていない * `_sysctl` が宣言されているヘッダファイルを include していない 現代のコンピューターでは OS とアプリケーションが出来ることが厳密に区別されていて、 OS の管理下でないとできないことをやるには OS に対して要請するしかなく、それがシステムコールです。 通常は様々なライブラリやフレームワークを通して最終的に呼び出されるものであって、普通のプログラムで直接的に利用する場面はほとんどありません。 あるとしたら「よくわかりませんでした」という状況で使ってよいものではありません。 また、 `_sysctl` はかなり前から非推奨になっていて、もし使っているなら削除して `/proc/sys` を使うのが望ましいとされているようです。