这个问题的引出是由于,在实际应用过程中遇到主程序需要调用独立的功能模块(API),并获取其返回结果,
可以通过文件操作,将功能模块生成结果写入日志,主程序读取日志结果,而主程序提取日志信息后,要需要形成新的
日志文件,这个过程就涉及到三次文件打开关闭操作,影响软件性能;
API实际处理运算是在其内部创建的子线程的子线程(该API是在第三方API基础封装)中完成,线程创建过程能够传递
(void *)类型的参数,按照上面文件的操作也是将文件名作为字符串传入线程任务函数,处理结果形成特定的文件名的
日志;既然能够传递字符串,为何不直接传递可操作的地址到线程内部,直接将处理结果写入到地址中,于是就有了另外
的方法,在调用该API的主程序中先malloc申请一段内存(ch)用来存储处理结果,将内存首地址作为API形参传入,
然后将地址的数值转化为字符串(addr_ch),通过创建线程时传入到线程任务函数中,在线程内存先通过atoi库函数转化成
unsigned long存储(addr),接着强制转化成地址指针,最后就可以操作malloc的地址了(因为malloc申请内存在堆区,唯一性)。
测试代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
void *task(void *dat