печать информации из статистики (2) - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть файл, и когда я вызываю stat (2), я получаю:

  File: 'testarg.txt'
  Size: 8           Blocks: 1          IO Block: 121072 regular file
Device: 30h/48d Inode: 716627550   Links: 1
Access: (0644/-rw-r--r--)  Uid: (74112/ laz18)   Gid: (72216/grp.csci.mentors)
Access: 2018-04-29 14:56:51.380908597 -0700
Modify: 2018-04-29 14:37:51.230987592 -0700
Change: 2018-04-29 14:37:51.231987501 -0700
 Birth: -

Итак, я хочу распечатать некоторую информацию из этого (и сделать так, чтобы я мог сделать то же самое для других файлов:

file name: testarg.txt  
user name: laz18  
group name: grp.csci.mentors
permissions: -rw-r--r-- 
links: 1
size: 8
modification time: 2018-4-29 14:37:51.230987592 -0700

но я не уверен, как на самом деле получить эту информацию из статистического вызова. Я знаю, что он содержит такие вещи, как st_uid, который содержит идентификатор пользователя, но я не знаю, как на самом деле захватить это и затем напечатать его.

Edit:

Я нашел способ получить доступ к некоторой информации, возвращаемой stat (), но эти две проблемы все еще вызывают у меня проблемы:

int userName = fileStats.st_uid; возвращает 74112 вместо laz18

int groupName = fileStats.st_gid; возвращает 72216 вместо grp.csci.mentors

Мне нужен какой-то способ доступа к ним, а на страницах руководства не сказано, как это сделать.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Для доступа к имени пользователя и имени группы вы можете использовать getpwuid(3) и getgrgid(3)

struct passwd *pwd;
struct group *grp;
struct stat sb;

if (stat(argv[1], &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
}

pwd = getpwuid(sb.st_uid);
if (pwd == NULL) {
    perror("getpwuid");
    exit(EXIT_FAILURE);
}
printf("User %s\n", pwd->pw_name);

grp = getgrgid(sb.st_gid);
if (grp == NULL) {
    perror("getgrgid");
    exit(EXIT_FAILURE);
}
printf("group %s\n", grp->gr_name);

Вы должны также включить эти заголовки:

#include <sys/types.h>
#include <grp.h>
#include <pwd.h>
0 голосов
/ 30 апреля 2018

Чтобы получить имя пользователя из идентификатора пользователя, вы можете использовать getpwuid.

Чтобы получить имя группы из идентификатора группы, вы можете использовать getgrgid.

...