- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Linux 中运行一个 C 程序,它打印文件名及其用户和组所有权。我正在使用 getpwuid
和 getgrgid
。
当文件由不存在的用户拥有时(即,在我的机器上没有针对给定 UID 的 /etc/passwd
条目),我的程序会出现“由信号 11 终止”的段错误。
我怎样才能使我的程序的行为与 ls
相同,以便它在用户不存在时打印数字 UID,而不是出现段错误?
相关代码片段如下:
lstat(filename,&fileStat)
struct group *grp;
struct passwd *pwd;
pwd = getpwuid(fileStat.st_uid);
printf(" %s", pwd->pw_name);
grp = getgrgid(fileStat.st_gid);
printf(" %s", grp->gr_name);
最佳答案
如果在/etc/passwd 数据库中找不到用户或出现错误,
getpwuid
和 getgrgid
将返回一个 NULL
指针。在访问它的值以避免段错误之前,您必须检查它不是 NULL
。
在使用 fileStat
之前,您还必须检查 lstat
的返回值以确保它成功,否则会导致另一个段错误。 lstat
失败时返回 -1,否则设置 errno 为 0。 lstat(3)
int ret = lstat(filename,&fileStat)
if(ret == -1){
fprintf(stderr, "lstat: (%s): %s\n", filename, strerror(errno));
return 1;
}
struct group *grp;
struct passwd *pwd;
pwd = getpwuid(fileStat.st_uid);
if(pwd != NULL){
printf(" %s", pwd->pw_name);
}else{
printf(" %ld", (long)fileStat.st_uid);
}
grp = getgrgid(fileStat.st_gid);
if(grp != NULL){
printf(" %s", grp->gr_name);}
else{
printf(" %ld", (long)fileStat.st_gid);
}
getpwuid(3)有时它可能会在出错时返回 NULL 指针并设置 errno
。在检查特定错误之前,您必须将 errno 设置为零
关于c - 当给定 UID 的用户不存在时,getpwuid 和 getgrgid 会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173142/
我正在使用 apparmor 在 Ubuntu 11.10 上对 R 进行沙箱处理。我注意到的一件事是,对于 R 创建的每个 png 或 pdf 图,它都会显示警告: (process:4589):
我 pip install --upgrade google-cloud-storage -t libs 到我的应用引擎应用。 在 appengine_config.py 中,我添加了: vendor
uid_t userId = getuid(); userId = 999; // cause error errno = 0; passwd* pw =
这是一个小的 C 程序,它在文件设置了 setuid 标志时打印(好吧,应该打印)进程的真实有效 ID。在这个程序中,当我第二次调用 getpwuid (L.No 38) 时,它倾向于覆盖在 L.No
想要理解@ perldoc.perl.org 给出的示例代码行对于 getlogin $login = getlogin || getpwuid($<) || "Kilroy"; 它似乎试图从 get
我有以下代码。它给我一个可用内存的问题,但我还没有弄清楚问题到底是什么。似乎 getpwuid(buf->st_uid); 与 readdir(dirh); 或 stat 函数不兼容。有谁知道为什么吗
我在 Linux 和 FreeBSD 上工作。当我使用 getpwnam() 或 getpwuid() 时,我得到一个指向 passwd 结构的指针。使用该 passwd 结构的 char* 成员的安
在 Fedora 21 上考虑以下 Linux 命令: [0:12:57][/tmp/nss]$ echo 'main() { getpwuid(1000); }' > test.c
在 Python 2.7、3.4 和 3.5 中,grp.getgrgid 能够接受一个字符串: from grp import getgrgid print(getgrgid('0')) 但是,pw
如果用户是 LDAP 用户,我在检索 Red Hat Enterprise 6 的当前用户信息时遇到问题? 我有一些代码(实际上是安装工具的一部分)需要检索用户名、主目录和其他详细信息。它使用 get
调用 getpwuid(uid) 后,我得到了一个指针的引用。当我不再使用它时,我应该释放它吗?阅读手册页,它说它引用了一些静态区域,这些区域可能会被后续调用相同函数覆盖,所以我不确定是否应该触及该内
我正处于几周后将上线的产品的优化/分析阶段,我很惊讶地发现一些泄漏并非(我相信)源 self 的代码。其中之一是 iOS 5.1.1 中存在的 strdup/malloc 泄漏,对此我只能等待更新。然
我在 Linux 中运行一个 C 程序,它打印文件名及其用户和组所有权。我正在使用 getpwuid 和 getgrgid。 当文件由不存在的用户拥有时(即,在我的机器上没有针对给定 UID 的 /e
我想要一个相当于内核空间中 LKM 模块中的 getpwuid() 的库,以获取“passwd”结构。你能告诉我如何从内核空间而不是用户空间获取“passwd”结构吗?谢谢。//DAUM 最佳答案 您
我有以下 C++ 文件 pwd01.cpp: #include #include int main() { passwd* pwd = getpwuid(getuid());
我是一名优秀的程序员,十分优秀!