因此,我正在制作一个非常简单的程序,输出UNIX系统上文件的属性。
为了做到这一点,我一直在使用stat()。
但是,我在打印文件的用户和组时遇到了一些问题。其他一切似乎都正常。
这是我的代码的一个小片段(已经声明了struct):
stat(dir_pointer->d_name, &buf);
printf("%o %s\n", buf.st_nlink, buf.st_uid);
每当我运行这个特定的代码部分时,它都会给我一个分段错误。用户和组会被表示为字符串吗?
编辑1
struct stat buf; // struct for stat
发布于 2016-03-27 13:08:47
st_uid
成员的struct stat
是一个uid_t
类型的整数,它通常与unsigned short
或unsigned int
相同。它包含数值uid,而不是用户名。
如果要打印数字uid,首先需要将其转换为定义良好的整数类型,并在printf中使用正确的格式描述符:
printf("%ld\n", (long)buf.st_uid);
另一方面,如果要打印关联的用户名,则需要使用函数getpwuid
来执行转换:
struct passwd *pwd;
pwd = getpwuid(buf.st_uid);
if(pwd == NULL) {
perror("getpwuid");
} else {
printf("%s\n", pwd->pw_name);
}
请注意,getpwuid
返回一个指向静态缓冲区的指针,因此如果您想在以后重用它,则需要保存其值的副本。
https://stackoverflow.com/questions/36252328
复制相似问题