从 stat(2) 打印信息
printing information from stat(2)
我有一个文件,当我对其调用 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
但我不确定如何从 stat 调用中实际获取此信息。我知道它包含 st_uid
之类的东西,其中包含用户 ID,但我不知道如何实际获取它然后打印它。
编辑:
我找到了一种方法来访问 stat() 返回的一些信息,但这两个仍然给我带来问题:
int userName = fileStats.st_uid;
returns 74112 而不是 laz18
int groupName = fileStats.st_gid;
returns 72216 而不是 grp.csci.mentors
我需要一些方法来访问它们,手册页没有说明如何访问。
要从用户 ID 获取用户名,您可以使用 getpwuid
。
要从群组 ID 获取群组名称,您可以使用 getgrgid
。
要访问用户名和组名,您可以使用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);
你也必须包括这个 headers:
#include <sys/types.h>
#include <grp.h>
#include <pwd.h>
我有一个文件,当我对其调用 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
但我不确定如何从 stat 调用中实际获取此信息。我知道它包含 st_uid
之类的东西,其中包含用户 ID,但我不知道如何实际获取它然后打印它。
编辑:
我找到了一种方法来访问 stat() 返回的一些信息,但这两个仍然给我带来问题:
int userName = fileStats.st_uid;
returns 74112 而不是 laz18
int groupName = fileStats.st_gid;
returns 72216 而不是 grp.csci.mentors
我需要一些方法来访问它们,手册页没有说明如何访问。
要从用户 ID 获取用户名,您可以使用 getpwuid
。
要从群组 ID 获取群组名称,您可以使用 getgrgid
。
要访问用户名和组名,您可以使用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);
你也必须包括这个 headers:
#include <sys/types.h>
#include <grp.h>
#include <pwd.h>