したがって、これは最初は単純に見えましたが、Googleとここをクロールした後、答えは私が最初に思ったほど単純ではないようです。
基本的に、私はオペレーティングシステムコースの実践の一部としてMINIXカーネルを編集しており、InformationServerのファンクションキーを押したときに実行中のプロセスの数を吐き出す小さな関数を追加する必要があります。他のすべてのものが機能するように機能を統合する方法を理解しましたが、私の人生では、システムで実行されている現在のプロセス数をCコードと変数に取得する方法を理解できません。プリントアウト。
最初に、SYS_NUMPROCSのような気の利いたSyscallか、値を返す何かがあると思いましたが、運がありませんでした。次に、システム( "ps -ax | wc -l")からファイルに出力をパイプしようとしましたが、ファイルは作成されませんでした。popen()を使用してみましたが、うまくいきませんでした。バッファに単純な「ls」を読み込んでも、コードを爆破してコードの実行を「ハング」させるだけなので、出力はありません。
だから今、私は本当に困惑しています、そしてこの時点で私はすべての明白なオプションを使い果たしたので、どんな助けも非常に素晴らしいでしょう。
私が今考えることができるのは、すべてのプロセスをカウントするループだけですが、最初にシステムのプロセスリストにアクセスする必要があり、ディレクトリとしての/ proc /について漠然とした話を聞いたことがありますが、私はそうしていません。それにアクセス/実行する方法、または最初にプロセスの数を取得するためにどのようにリンクするかについての手がかり。
スタックに感謝します(笑しゃれ)、みんな:)
また、私が試したもののどれも私に喜びを与えなかったので、私が化粧品の出力のための基本的な印刷以外に何も書いていなかったので、私は明示的にコードを含めませんでした:/
編集メモ:みんな、これはカーネル編集です-私はシステムCファイルの情報をprintfする関数を書いています。次に、カーネルを再コンパイルし、システムを再起動してテストします。これはUNIX(MINIX)カーネルであり、Linuxカーネルではなく、ユーザーモードプログラムでもありません。
popen()の私のコードは、あなたの何人かが要求したように、次のとおりです。
public void cos_dmp(){
char buffer[512];
FILE * f;
f = popen("ps -ax | wc -l","r");
fgets(buffer, sizeof(buffer),f);
//buffer should now contain result of popen()
printf(buffer);
}
それは私が覚えているものから少しハッキングされたバージョンであり、それを非常にシンプルに保ち、私がやろうとしていたことを皆さんに示しています。ただし、基本的にsystem()呼び出しの出力を呼び出す以外に、これを行うためのより良い方法が必要です。
もう一度編集します。上記のコードはユーザープログラムからは完全に機能しますが、カーネル関数からは機能しません。誰かが理由を知っていますか?:/