常用的Linux应用API轮子

嵌入式技术

1327人已加入

描述

这个项目其实很早之前就开始了,最初的目的是为它(Future3D)而准备的,因此最近一段时间利用晚上下班的时间以及周末的时间在完成,故很少更文。

Linux

这套接口的实现愿景是为了能够更快的搭建一套基于Posix接口的通用物联网3D打印框架而服务的,而这套框架将无差别的兼容全平台,无论是Linux、Win32还是Mcu等等,它都能够顺利运行;因此,我们需要去实现一些通用的轮子,例如文件IO、线程、定时器、消息队列、互斥锁、网络操作等等接口。因此在最初的选择是先基于Linux应用开发,先将常用的、通用的接口进行封装和实现,然后再开始设计业务逻辑和时序,最后调试整个系统。而相对于其它的平台移植起来就容易多了,我们只需要替换掉封装接口以下的Posix API,便能够实现无差别兼容。前这套Linux应用API轮子分为21个大类,后续还会根据需求继续增加,开源项目地址:

https://github.com/Yangyuanxin/Linux_APUE
https://gitee.com/morixinguan/Linux_APUE

Linux

项目是基于CMake构建,整体的统一编码风格是基于大驼峰。另外,每个小类中的实现都会有一个Test函数,例如目录操作的test函数:

#ifdef TEST_OPEN
Void CallBack(S8 *Name)
{
    printf("Name: %s
", Name);
}

S32 DirOperateTest(Void)
{
    S32 Counter = 0;
    //扫描当前目录下的所有文件并通过CallBack将目录下的所有文件
    //打印出来
    Counter = ScanListFiles(".", Null, CallBack);
    if(Counter < 0)
    {
        printf("ScanListFiles fail!
");
        return -1;
    }
    printf("Have't Suffix Counter = %d
", Counter);
    //扫描当前目录下所有的.txt文件并通过CallBack将目录下的所有.txt文件打印出来
    Counter = ScanListFiles("."".txt", CallBack);
    if(Counter < 0)
    {
        printf("ScanListFiles fail!
");
        return -1;
    }
    printf("Have Suffix Counter = %d
", Counter);
    printf("DirOperate Test Success!
");
    return 0;
}
#endif

它是用于告诉用户这些接口应该如何去使用以及针对接口的简单测试用例项目的主入口是main.c,main.c会去调用各个子类下的Test接口函数。

项目构建方法

Linux

最终会在这个目录下生产a.out可执行程序:

Linux

如果需要将其移植到ARM Linux平台上运行,只需要修改CMakeList.txt文件即可,如下所示:

#配置交叉编译器,如果默认以GCC编译,则注释
SET(CMAKE_C_COMPILER   /home/book/workspace/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER /home/book/workspace/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

添加对应的交叉编译器即可。

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分