- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码遇到了(0xC0000005)的问题,我在Duo Security源代码中看到了这段代码,Duo可以成功运行这段代码,但是当我运行这段代码时,它会失败,并且这段代码与它们相同。我尝试调试,似乎在 *iter = '\0'
发生时失败。
#include <stdio.h>
#include <stdlib.h>
char *
duo_split_at(char *s, char delimiter, unsigned int position)
{
unsigned int count = 0;
char *iter = NULL;
char *result = s;
for (iter = s; *iter; iter++) {
if (*iter == delimiter) {
if (count < position) {
result = iter + 1;
count++;
}
*iter = '\0';
}
}
if (count < position) {
return NULL;
}
return result;
}
int main()
{
char* pw_gecos = "code1/code2/code3//textField/usergecosparsed";
const int delimited_position = 5;
char delimiter = '/';
char* user = NULL;
user = duo_split_at(pw_gecos, delimiter, delimited_position);
printf("%s",user);
return 0;
}
下面的代码通过使用 getpwnam()
获取用户的 gecos 部分可以完美地工作:
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
char *
duo_split_at( char *s, char delimiter, unsigned int position )
{
unsigned int count = 0;
char *iter = NULL;
char *result = s;
for ( iter = s; *iter; iter++ )
{
if ( *iter == delimiter )
{
if ( count < position )
{
result = iter + 1;
count++;
}
*iter = '\0';
}
}
if ( count < position )
{
return(NULL);
}
return(result);
}
int
main()
{
char * user = "daijwei";
struct passwd *pw;
if ( (pw = getpwnam( user ) ) == NULL )
{
printf( "error" );
return(-1);
}
const char delimiter = '/';
const unsigned int delimited_position = 5;
user = duo_split_at( pw->pw_gecos, delimiter, delimited_position );
printf( "%s\n%s\n", user, pw->pw_gecos );
return(0);
}
但是现在我遇到了新的问题,我从 GNU 网站下载了 glibc,尝试了解 getpwnam
是如何工作的,但我失败了。有谁知道 getpwnam
是如何工作的或者它的源代码?
我只找到一个名为 getpwnam.c 的文件,但在文件内部,我不明白它是什么。
#include <pwd.h>
#define LOOKUP_TYPE struct passwd
#define FUNCTION_NAME getpwnam
#define DATABASE_NAME passwd
#define ADD_PARAMS const char *name
#define ADD_VARIABLES name
#define BUFLEN NSS_BUFLEN_PASSWD
#include "../nss/getXXbyYY.c"
最佳答案
问题是 pw_gecos
指向字符串文字,并且尝试修改字符串文字的内容会导致未定义的行为(在您的情况下,是运行时错误)。
如果将 pw_gecos
的声明更改为
char pw_gecos[] = "code1/code2/code3//textField/usergecosparsed";
你的代码应该可以工作。在本例中,您将为 pw_gecos
创建一个数组,并将字符串文字的内容复制到其中。
关于c - getpwnam() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009379/
#include #include #include int main(void) { printf("%s %s\n", getpwnam("steve")->pw_name,
我使用下面的代码遇到了(0xC0000005)的问题,我在Duo Security源代码中看到了这段代码,Duo可以成功运行这段代码,但是当我运行这段代码时,它会失败,并且这段代码与它们相同。我尝试调
我正在尝试更新函数中的密码结构。此函数获取指向密码结构的指针,其中我必须更新详细信息。 我得到一个函数的 struct passwd* 作为参数,我的要求是将它的成员更新为其他用户(user2)的信息
在 getuserinfo() 中,如果行 struct passwd *theUser = getpwnam(username); 尝试使用不存在的用户名,程序将以-1 的误差。它永远不会到达函数的
我编写了一个简单的程序,它在用户名上调用 getpwnam(),将该用户名传递给一个函数,然后再次调用 getpwnam()。出于某种原因,我总是在函数中获取 root 的密码信息。 #include
我正在学习系统编程。 有很多函数返回静态分配的变量。 其中之一,就是getpwnam()。 因此,在我正在阅读的书籍示例中: printf("%ld %ld\n", (long)(getpwnam("
是否有针对 getpwnam 内存泄漏的修复或解决方法? 最佳答案 getpwnam() 不会内存泄漏。实际上,后续调用将覆盖其静态内部缓冲区。 这类函数不是不可重入,因此非线程安全。保罗建议使用 g
我有一个程序,其系统调用 getpwnam() 在运行时失败。为了调试它,我决定单独运行 getpwnam() 和这段代码(它来自一个论坛): #include #include #include
我在 Linux 和 FreeBSD 上工作。当我使用 getpwnam() 或 getpwuid() 时,我得到一个指向 passwd 结构的指针。使用该 passwd 结构的 char* 成员的安
我正在尝试进行网络日志记录,并使用 getpwnam() 函数来检查现有的用户名。但是对于有效的用户名,getpwnam 返回错误:没有这样的文件或目录。所以我尝试了 getpwnam_r(),但它也
看起来“nam”在 getpwnam 或 getspnam 的上下文中意味着“item”或“entry”。它到底代表什么? 最佳答案 意思是“按名字”。 例如getpwnam -> 按名称获取密码条目
getpwnam 是否遵守/etc/nsswitch.conf? getpwnam 状态的联机帮助页 The getpwnam() function returns a pointer to a st
我正在几个 Ubuntu 64 位服务器上设置 ZABBIX 代理(用 C 语言编写)。我通常以 32 位编译所有内容,除非我特别需要 64 位(例如数据库服务器)。有问题的服务器将托管虚拟服务器并具
Python pwd 模块提供对 getpwnam(3) POSIX API 的访问,可用于通过用户名获取特定用户的主目录,以及确定用户名是否有效.如果使用不存在的用户名调用 pwd.getpwnam
这是我的 crontab 文件的内容: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO="example@example.com"
我是一名优秀的程序员,十分优秀!