将 AIX 特定的 C 函数调用迁移到 Linux

Posted

技术标签:

【中文标题】将 AIX 特定的 C 函数调用迁移到 Linux【英文标题】:Migrating AIX specific C function calls to Linux 【发布时间】:2019-11-25 12:35:51 【问题描述】:

我从 IBM AIX 上的一个应用程序中获得了源文件,我正在尝试在 Linux 上构建它们。但是,在 AIX 上存在的名为 usersec.huserpw.h 的头文件在 Linux 上不存在。因此,在 Linux 上,这些函数出现编译器错误:

usersec.h声明

int     getuserattr (char *, char *, void *, int);

更多关于getuserattr的信息是here

userpw.h声明

struct userpw

        char    *upw_passwd;            /* user's passwd */
        unsigned int    upw_flags;      /* flags of restrictions */
        time_t  upw_lastupdate;         /* date of last passwd update */
        char    upw_name[PW_NAMELEN];   /* user's name */
;

struct userpw   *getuserpw (); 
int setpwdb ();  
int endpwdb ();

更多信息请查询:getuserpw、setpwdb and endpwdb

如果有人知道如何在 Linux 上编写等效函数,那就太好了。

【问题讨论】:

您是否对userpw 结构应包含的内容以及getuserattr()getuserpw()setpwdb()endpwdb() 的预期行为有更多见解? 在 Linux 上无法读取用户密码,只能存储哈希值。 getspent() 和朋友可能是 pwdb 最接近的等价物。 @StefOverflow 非常感谢您的评论。我添加了指向这些函数的文档的链接。 另见Header files not found when porting from AIX to Linux 【参考方案1】:

您可能想要使用getpwent 及其相关函数。

getpwent() 函数返回一个指向结构的指针,该结构包含 密码数据库中记录的细分字段(例如, 本地密码文件/etc/passwd、NIS 和 LDAP)。第一次 getpwent() 被调用,它返回第一个条目;此后,它 返回连续的条目。

setpwent() 函数回退到密码的开头 数据库。

endpwent()函数用于关闭密码数据库后 所有处理都已执行。

如果您想获取特定用户的密码条目,可以使用getpwnam 或其变体之一。

getpwnam() 函数返回一个指向包含以下结构的结构的指针 密码数据库中记录的细分字段(例如, 本地密码文件/etc/passwd、NIS 和 LDAP)匹配 用户名名称

【讨论】:

以上是关于将 AIX 特定的 C 函数调用迁移到 Linux的主要内容,如果未能解决你的问题,请参考以下文章

小型机下移从UNIX 到 Linux 的迁移应注意什么?

Unix 迁移到Linux 该怎么做?

linux c ++如何在特定时间间隔后调用函数

利用DBMS_FILE_TRANSFER迁移数据库从AIX至Linux

在 AIX 中启动 C++ 可执行文件时出错

GDB:将参数转储到特定函数的所有调用