2011-01-10 18 views
10

Pracuję na aplikacji do zbierania i wysyłania różnych bitów informacji systemowych (przestrzeń partycji/bezpłatny, informacje o baterii laptopa itp.). Nie mam zbyt dużego sukcesu, aby uzyskać te informacje w postaci bezpośredniego interfejsu C++, chociaż wszystkie są dostępne za pośrednictwem plików w/proc (lub podobnym).Pliki w systemie Linux C++: apis vs/proc?

Więc - zastanawiam się, czy czytanie/parsowanie tych plików w mojej aplikacji C++ jest odpowiednim sposobem uzyskania tych informacji, czy powinienem próbować odkryć API? (UWAGA: pracuję z statvfs).

Do tej pory wygląda na to, że łatwiej jest zebrać tego rodzaju informacje w Win32. Wydaje się dziwne.

+0

Źródło procinfo ma pewne wskazówki, jak analizować każdy plik http://svn.tabris.net/repos/procinfo-ng/trunk/ – pmr

Odpowiedz

7

Jest najlepszą praktyką zdecydowanie trzymać się z API w następującej kolejności.

  • Twój język API (nie bardzo pomocne dla ciebie tutaj, ale mówią na smyczki, funkcja ciąg C99 jest lepszy w użyciu niż placówki strun biblioteka określony przez POSIX lub innego standardu OS).

  • POSIX API oprogramowania operacyjnego

  • Nielegalni API jądra udokumentowane kernel API jest (przynajmniej te złamie, powiedzmy, użytkownicy ioctl jeśli oni się zmieniają, więc prawdopodobnie nie ulegnie zmianie)

  • /proc

  • /dev/kmem, /dev/mem

Nie ma powodu, aby sądzić, że /proc trolling będzie przenośny lub nawet tego samego od aby zwolnić. Nie każdy system będzie miał nawet zamontowany /proc!

Powiedziawszy to wszystko, to jest znacznie łatwiej po prostu zeskrobać rzeczy off /proc a jeśli jest to jedyny dostępny interfejs potem należy iść dalej i użyć it.qa

wreszcie uporządkowania ostatnie dwa nie są całkowicie jasne, ponieważ /proc nie jest dostępny dla analizy zwłok po awarii, ale narzędzia, które mogą zajrzeć do zrzutu pamięci, będą działały.

+1

Nie * nie ma * innego interfejsu niż/proc w przypadku wielu informacji w systemie Linux. A jeśli chodzi o zmiany wersji, * zwracaj uwagę * na dane wyjściowe/proc, które zawierają identyfikator wersji. A w wynikach z wieloma kolumnami/proc nie zakładaj, że nie zdobędą więcej kolumn w przyszłości! –

+0

I dlatego umieściłem go na liście miejsc do zrobienia. – DigitalRoss

+1

+1 ale dodałabym powyższe narzędzia '/ proc' w repozytorium, które używa'/proc' we właściwy dla systemu sposób (np. 'Procps',' systune', 'linuxinfo') – darvids0n

0

Jak zauważyłeś, wiele informacji o systemach Linux znajduje się w /proc. I masz rację, że często nie ma C API do pobierania tych informacji (choć zwykle jest to polecenie powłoki, jeśli chcesz trzymać się basha zamiast C++). W najgorszym przypadku możesz utknąć w analizie /proc, ale możesz uzyskać przykładowy kod w postaci poleceń powłoki open source dla konkretnego elementu.

+0

Chyba chcę po prostu "ktoś, kto wie", aby powiedzieć "nie ma bez cuchnącego api za to ". Im dobrze z parsowania różnych plików, jeśli jest to, co zakłada się, że jest prawidłowe. – ethrbunny

+0

@jyeargers Większość zadań nie ma przypisanego interfejsu API.Przykładowy kod z projektów open-source to zwykle droga naprzód. (Lub po prostu 'strace' polecenie powłoki, które chcesz emulować i zobaczyć, jakie pliki otwiera, jeśli to wszystko, czego potrzebujesz.) – chrisaycock

Powiązane problemy