免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1561 | 回复: 6
打印 上一主题 下一主题

[Linux] 动态库中如何返回一个结构体 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-20 17:12 |只看该作者 |倒序浏览
Linux态库中,要返回一个结构体类型,应该如何做呢?下面是我的接口函数,我用到了malloc函数,但这样做的话就无法free掉申请的空间,请大神给点提示,应该怎么做呢?

struct net_interface *getnet(char *devname)
{       
        int fd;
        char *net_info;
        struct ifreq ifr;
        struct ethtool_value eth_val;
        struct ethtool_cmd eth_cmd;
        struct net_interface *net_card;

        //net_card = (struct net_interface *)net_info;
        net_card = malloc(sizeof(struct net_interface));

        memset(&ifr, 0, sizeof(ifr));
        memset(&eth_val, 0, sizeof(eth_val));
        memset(&eth_cmd, 0, sizeof(eth_cmd));

        strcpy(ifr.ifr_name, devname);

        fd = socket(AF_INET, SOCK_DGRAM, 0);
        if (fd < 0)
        {
                perror("Cannot get control socket");
                exit(1);
        }

        net_card->speed = get_net_speed(fd, &ifr, &eth_cmd);
        net_card->link_status = get_net_link(fd, &ifr, &eth_val);

        //free(net_card);
        return &net_card;
}

论坛徽章:
0
2 [报告]
发表于 2013-11-20 20:06 |只看该作者
把net_card作为参数传进去.

论坛徽章:
0
3 [报告]
发表于 2013-11-20 22:46 |只看该作者
scotthuang1989 发表于 2013-11-20 20:06
把net_card作为参数传进去.


你的意思在接口函数中再加一个形参?改成这样:struct net_interface *getnet(char *devname, struct net_interface *net_card)?然后在调用函数中再把一个struct net_interface类型的结构体传进来?是这样吗?

论坛徽章:
0
4 [报告]
发表于 2013-11-21 14:53 |只看该作者
int getnet(char *devname, struct net_interface *net_card)
devname为输入参数
net_card为输出参数,在API外申请空间
int为返回值

论坛徽章:
0
5 [报告]
发表于 2013-11-21 16:26 |只看该作者
回复 3# 后知后觉gogogo


    是的。这样调用者就能控制内存的使用了.

论坛徽章:
0
6 [报告]
发表于 2013-11-22 11:31 |只看该作者
回复 4# braveyly
非常感谢,说得很详细


   

论坛徽章:
0
7 [报告]
发表于 2013-11-22 11:32 |只看该作者
回复 5# scotthuang1989


感谢,问题解决啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP