Вход/Регистрация
Программирование для Linux. Профессиональный подход
вернуться

Самьюэл Алекс

Шрифт:

}

/* Эта функция находит имя пользователя,

соответствующее заданному идентификатору.

Возвращаемый буфер должен быть удален

в вызывающей функции. */

static char* get_user_name(uid_t uid) {

 struct passwd* entry;

 entry = getpwuid(uid);

 if (entry == NULL)

system_error("getpwuid");

 return xstrdup(entry->pw_name);

}

/* Эта функция находит имя группы, соответствующее

заданному идентификатору, возвращаемый буфер

должен быть удален в вызывающей функции. */

static char* get_group_name(gid_t gid) {

 struct group* entry;

 entry = getgrgid(gid);

 if (entry == NULL)

system_error("getgrgid");

 return xstrdup(entry->gr_name);

}

/* Эта функция находит имя программы, которую выполняет

процесс с заданным идентификатором. Возвращаемый буфер

должен быть удален в вызывающей функции. */

static char* get_program_name(pid_t pid) {

 char file_name[64];

 char status_info[256];

 int fd;

 int rval;

 char* open_paren;

 char* close_paren;

 char* result;

 /* Генерируем имя файла "stat", находящегося в каталоге

данного процесса в файловой системе /proc,

и открываем этот файл. */

 snprintf(file_name, sizeof(file_name), "/proc/%d/stat",

(int)pid);

 fd = open(file_name, O_RDONLY);

 if (fd == 1)

/* Файл не удалось открыть. Возможно, процесс

больше не существует. */

return NULL;

 /* Чтение содержимого файла

 rval = read(fd, status_info, sizeof(status_info) — 1);

 close(fd);

 if (rval <= 0)

/* По какой-то причине файл не удалось прочитать, завершаем

работу. */

return NULL;

 /* Завершаем прочитанный текст нулевым символом. */

 status_info[rval] = '\0';

 /* Имя программы -- это второй элемент файла, заключенный в

круглые скобки. Находим местоположение скобок. */

 open_paren = strchr(status_info, '(');

 close_paren = strchr(status_info, ')');

 if (open_paren == NULL ||

close_paren == NULL || close_paren < open_paren)

/* He удалось найти скобки, завершаем работу. */

return NULL;

 /* Выделение памяти для результирующей строки */

 result = (char*)xmalloc(close_paren — open_paren);

 /* Копирование имени программы в буфер. */

 strncpy(result, open_paren + 1, close_paren - open_paren — 1);

 /* Функция strncpy не завершает строку нулевым символом,

приходится это делать самостоятельно. */

 result[close_paren - open_paren - 1] = '\0';

 /* Конец работы. */

 return result;

}

/* Эта функция определяет размер (в килобайтах) резидентной

части процесса с заданным идентификатором.

В случае ошибки возвращается -1. */

static int get_rss(pid_t pid) {

 char file_name[64];

 int fd;

  • Читать дальше
  • 1
  • ...
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: