最近接手了一个Linux下内核编程的项目,在阅读项目原有代码的基础上,学到了很多新知识,总结一下记录在这里。
在这个项目中,使用SQLite存储用户数据,因此需要在C语言中实现SQLite的访问和增删改查处理。
在这个项目中,编写内核模块进行加解密操作,使用了Linux内核提供的crypto加密API。
在这个项目中,编写内核模块进行操作,与用户态进程之间使用Netlink Socket进行通信。
在这个项目中,客户端进程和服务器进程在同一台机器上,使用Unix Domain Socket通信。
说实话查了一些资料还不是很清楚,大概给出一个简单的理解。
简单了解了一下gdb的用法。 在已经了解lldb的基础上,再看gdb的用法就简单多了,大部分的操作都是基本一致的。
LLDB是一种C/C++程序的调试器工具,可以监控程序的变量值和堆栈的变化情况。在没有IDE情况下调试程序非常实用。网上找到的资料大多都是help信息的简单翻译,要想熟练使用还得经常练习。
刚开始使用Windows提供的各种API函数时,对于函数参数的类型感到非常的迷惑,实际上Windows中对于各种C++数据类型做了封装和处理,得到了一组Windows的变量类型,其中的部分字符和字符串的定义如下。
其他的类型定义可以在具体使用时搜索查看头文件(例如#include <Windows.h>)或者MSDN。
#include <Windows.h>
在C++11的STL线程库没有实现现成的信号量,可以使用互斥量和条件变量实现信号量机制。
建议使用自己定义的namespace以防止与现成的函数/类产生冲突。
由于使用了lambda函数和C++11的STL线程库,因此编译时需要指定 –std=c++11。
使用C++11实现的标准线程库进行并发编程
#include <thread>