示例如下
运行结果
使用daemon 创建守护进程
使用‘daemon()’创建守护进程
示例
信号函数sigaction的使用
在Ubuntu中,pthread库默认不存在,须进行安装
sudo apt install -y glibc-doc manpages-posix-dev
安装完成后可查看pthread使用手册man pthreads
使用vim pthread_create.c
来编辑代码创建或终止线程
#include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
返回值:
成功返回0 失败返回错误号;
pthread_exit()为终止线程
创建进程与终止进程的示例如下
编辑完成后可使用makefile来对其进行编译
使用vim makefile来编辑makefile如下
'gcc wenjianming.c -o wenjianming.out'
运行结果如下
线程的连接与分离
线程的连接
int pthread_join(pthread_t thread, void **retval);
参数1:thread表示等待的子线程的线程id; 参数2:retval用来接收返回结果, 成功返回0 失败返回错误号;
线程的分离
‘int pthread_detach(pthread_t thread);’
thread表示分离的子线程的线程id; 成功返回0 失败返回错误号
线程的连接与分离示例
使用互斥量保护多线程同时输出
初始化互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr);
mutex表示的是互斥锁的标号; mutexattr表示的互斥锁的属性,一般情况使用NULL,表示缺省属性。 成功返回0 失败返回错误号
在访问临界资源前,需要上锁
‘int pthread_mutex_lock(pthread_mutex_t *mutex);’
在访问临界资源结束,需要解锁
'int pthread_mutex_unlock(pthread_mutex_t *mutex);'
互斥锁示例如下
运行结果如下
条件变量
条件变量是利用线程共享的全局变量进行同步的一种机制,只要包括两个动作:一个线程等待某个条件为真,而将自己挂起(进入等待队列);另一个线程的条件成立,并通知等待队列中的线程继续。为了防止竞争,条件变量总是和一个互斥锁结合在一起使用
示例如下
进程
进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。
测试获取环境变量代码
通过main() 函数的第三个参数获取
通过environ全局变量获取
测试创建进程程序代码
fork()函数创建进程。
#include <unistd.h> pid_t fork(void);
示例如下
示例如下
运行结果
使用daemon 创建守护进程
守护进程是脱离于终端并且在后台运行,周期性的执行某种任务或者等待处理某些发生的事件进程。
使用‘daemon()’创建守护进程
示例
信号函数sigaction的使用
示例
但因为没有信号发生所以运行结果如下图
开发板
虚拟开发板准备完毕后使用
~/ubuntu-18.04_imx6ul_qemu_system/gui-qemu-imx6ull-gui.sh
打开开发板
LCD屏幕/图像
使用fb-test
打开屏幕,./myfb-test /dev/fb0
打开图像
串口 EEPROM
列出所有串口cd ~;i2cdetect -l && i2cdetect -y 0
写入i2c_usr_test /dev/i2c-0 0x50 w 0x01 0xff
读取$ i2c_usr_test /dev/i2c-0 0x50 w 0x33
命令控制LED
打开LED控制以及安装LED驱动
cd ~ cd led_driver_qemu/ insmod 100ask_led.ko
控制LED零号灯亮,LED一号灯灭:
./ledtest /dev/100ask_led0 on ./ledtest /dev/100ask_led1 off
控制LED零号灯亮,LED一号灯灭:
./ledtest /dev/100ask_led0 on ./ledtest /dev/100ask_led1 off
按键控制LED
启动按键控制
cd ~ cd button_driver_qemu/ insmod button_drv.ko insmod board_100ask_qemu_imx6ull.ko ./button_led_test