Не получать полное имя процесса в поле psinfo_t struct pr_fname при считывании информации о процессе из файла данных psinfo (/ proc /% d/psinfo) в struct psinfo_t из procfs.h в solaris ,psinfo_t solaris не содержит полного имени процесса в своем поле
Полное определение psinfo_t структура присутствует на сайте ниже:
http://docs.oracle.com/cd/E19253-01/816-5174/6mbb98ui2/index.html
только если имя процесса меньше равно 15 символов, то я получаю полное имя процесса другой мудрой, если имя процесса является более чем 15 символов, тогда я получаю только первые 15 символов символов имени процесса, которые усекаются.
код я использую, как показано ниже:
#include <iostream>
#include <cstdlib>
#include <procfs.h>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
// get the pid from command line
int pid = atoi(argv[1]);
// create the pstatus struct from procfs
psinfo_t info;
char file[100];
sprintf(file, "/proc/%d/psinfo", pid);
ifstream in(file);
if (in)
{
in.read((char*)&info, sizeof(psinfo_t));
in.close();
cout << "My Name: " << info.pr_fname << endl;
}
else
{
cout << "Process Not Exists!" << endl;
}
return 0;
}
Должен ли я читать какой-то другой файл (кроме PsInfo) из PROCFS файловой системы для того, чтобы получить полное имя процесса. Кроме того, если я использую команду belwo пса из командной строки, то я могу получить полное имя процесса:
ps -p 4970 -o comm
, но я не хочу, чтобы получить имя процесса, выполнив команду пса внутри моего кода. Мне любопытно, откуда ps бинар подбирает имя процесса.
есть предопределенная структура, в которой я могу хранить данные этого файла карты. – mSatyam
@mSatyam Это на той же странице man 'proc.4', с которой вы связались в своем вопросе. –
Я пробовал читать файл данных карты в prmap_t struct, но когда я напечатал член данных pr_mapname, это была пустая строка. Вы намеревались сделать что-то еще. Правильно ли я поступаю? – mSatyam