Итак, сначала это казалось простым, но после сканирования Google и здесь, ответ не кажется таким простым, как я сначала подумал.
По сути, я редактирую ядро MINIX как часть практического курса по моим операционным системам, и мне нужно добавить небольшую функцию, которая подскажет количество запущенных процессов при нажатии функциональной клавиши на информационном сервере. Я выяснил, как интегрировать функциональность, чтобы все остальные вещи работали, но я не могу понять, как получить текущее число процессов, работающих в системе, в мой код на C и переменную для распечатать.
Сначала я подумал, что будет отличный Syscall, такой как SYS_NUMPROCS, или что-то, что вернет значение, но не повезло.
Затем я попытался скопировать вывод из системы ("ps -ax | wc -l") в файл, и файл не был создан. Я попытался использовать popen (), и мне тоже не повезло - даже при простом считывании «ls» в буфер, он просто бомбит код и «вешает» прогон кода, поэтому вывода нет.
Так что теперь я по-настоящему озадачен, и любая помощь будет очень крутой, потому что на данный момент я исчерпал все очевидные варианты.
Единственное, о чем я сейчас могу думать, это цикл, подсчитывающий все процессы, но сначала вы должны перейти к списку процессов системы, и я услышал расплывчатые слова о / proc / как каталоге, но Я понятия не имею, как получить доступ / пройти через это или как это связано с получением количества процессов.
Спасибо за стек (смеется), ребята:)
Кроме того, я не включил код в явном виде, потому что ничего, что я написал, кроме базового printf'ing для косметического вывода, потому что ничего из того, что я пробовал, не доставило мне радости: /
Редактирование заметок: Ребята, это редактирование ядра - я пишу функцию для печати информации в системном файле C, затем перекомпилирую ядро и перезагружаю систему для тестирования. Это ядро 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 ().
Снова отредактируйте: приведенный выше код прекрасно работает из пользовательской программы, но не работает из функции ядра. У кого-нибудь есть идеи, почему?: /