Cコードでkernel.shmmaxの値を取得したい(シェルコマンド「$ sysctl -q kernel.shmmax」を使用して、centos5.0、centos6.0、およびubuntu10.04でクエリを実行します)。
次のコードを使用して見つけました。
#include <sys/sysctl.h>
const int SHM_ERROR=1;
main(){
int name[] = {KERN_SHMMAX};
int namelen = 1;
int oldval[1];
size_t oldlen = sizeof(oldval);
int rv = sysctl(name, namelen, (void*) oldval, &oldlen, NULL, 0);
if (rv!=0) {
fprintf(stderr, "while quering for shared memory size, sysctl returned error: %s\n", strerror(errno));
return SHM_ERROR;
}
else{
return 0;
}
}
上記のコードを実行すると、次のエラーが発生します。
共有メモリ サイズのクエリ中に、sysctl がエラーを返しました: ディレクトリではありません
このエラーが発生する理由がわかりません。私はそれをグーグルで検索し、ライブラリが調べようとするパスに問題があることを発見しました。
上記のコードを GDB で実行しようとしましたが、コードは関数 sysctl にステップ インしません。それ以外の場合は、より多くの情報を提供できたはずです。
データ ポイント: 次のコマンドを使用して、記載されているすべてのオペレーティング システムのコマンド ラインから kernel.shmmax を簡単に設定および取得できます。
$ sysctl -q kernel.shmmax
$ sysctl -w kernel.shmmax=1000000000
ありがとう