【发布时间】:2012-10-31 05:51:06
【问题描述】:
我正在尝试更新函数中的密码结构。 此函数获取指向密码结构的指针,其中 我必须更新详细信息。
我将struct passwd* 作为参数传递给函数,我的要求是将其成员更新为其他用户(user2)的信息,并且该函数的调用者应该拥有所有这些更新的详细信息。
我尝试了以下操作,请您帮助我建议什么是理想的方法。
我的功能是这样的:
struct passwd* myfunc(struct passwd *pw)
对于这个pw,我要更新一下细节。
尝试1:
使用getpwnam() 获取用户2 的详细信息到传递的struct passwd *pw。
pw = getpwnam("user2");
return pw;
不起作用,因为我们没有更新 pw 成员,而只是将pw 指向其他一些结构,pw 的指针成员仍然指向旧数据。
因此myfunc() 的父级不会获得更新的详细信息。
我们必须写信给会员。
尝试2:
使用getpwnam() 将用户2 的详细信息放入临时struct passwd*。
做一个memcpy(pw, temppasswd, sizeof(struct passwd))
不起作用,因为memcpy是浅拷贝,因此getpwnam()(虽然没有给temppasswd返回)会覆盖写静态缓冲区,pw可能有不同的值。
尝试3:
尝试过getpwnam_r(),它将详细信息写入作为参数传递给它的缓冲区,而不是写入静态数据区域(如getpwnam)。
不能使用这个,因为我没有pw,我有*pw。
所以,我不能将分配给pw的内存地址传递给getpwnam_r。
尝试 4:
我可以在 Try2 中逐个成员地复制,但如果我在将数据复制到其中之前不释放 pw 结构指针成员,则会导致内存泄漏。
有没有其他方法可以将详细信息复制到传递的pw* 而无需释放所有结构pw* 指针成员。
这有点令人困惑,我希望我对某人有意义。
【问题讨论】:
标签: c linux data-structures systems-programming