1@page posix posix
2
3[更正文档](https://gitee.com/alios-things/posix/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html)
4
5# 概述
6POSIX (Portable Operating System Interface) 是IEEE组织为了维护应用在不同操作系统之间的兼容性而制定的标准。 主要包括API,Shell和Utility等一整套应用环境。主要应用于Unix/Linux操作系统之间, 也有其他的操作系统为了兼容Unix/Linux的应用生态而支持POSIX标准, 如Zephyr, VxWorks, QNX, Fuchsia等。
7组件支持以下功能:
8- pthread 线程及其属性管理
9- pthread 条件变量及其属性管理
10- pthread 互斥及其属性管理
11- 文件系统类接口
12- 环境变量管理
13- POSIX信号量
14- POSIX定时器
15- POSIX消息队列
16
17## 版权信息
18> Apache license v2.0
19
20## 目录结构
21```tree
22posix
23|-- example
24|   |-- pthread_example.c #示例代码
25|-- include
26|   |-- dirent.h         #文件系统类接口申明
27|   |-- enviro.h         #环境变量接口申明
28|   |-- mqueue.h         #POSIX消息队列接口申明
29|   |-- posix
30|   |   |-- timer.h      #POSIX定时器接口申明
31|   |-- pthread.h        #pthread接口申明
32|   |-- semaphore.h      #POSIX信号量接口申明
33|   |-- signal.h         #signal结构体申明
34|   |-- sys
35|       |-- prctl.h      #prctl接口申明
36|-- package.yaml         #编译及配置文件
37|-- README.md            #组件说明文档
38|-- src
39    |-- dirent.c         #文件系统接口实现
40    |-- enviro.c         #环境变量接口实现
41    |-- internal
42    |   |-- pthread.h    #pthread内部定义
43    |   |-- sched.h      #调度功能内部定义
44    |-- mqueue.c         #POSIX消息队列实现
45    |-- prctl.c          #prctl实现
46    |-- pthread_attr.c   #pthread线程属性实现
47    |-- pthread.c        #pthread线程实现
48    |-- pthread_cond.c   #pthread条件变量及其属性的实现
49    |-- pthread_mutex.c  #pthread互斥锁及其属性的实现
50    |-- pthread_tsd.c    #pthread互斥锁及其属性的实现
51    |-- sched.c          #调度类接口实现
52    |-- semaphore.c      #POSIX信号量的实现
53    |-- timer.c          #POSIX定时器及时间函数的实现
54```
55
56## 依赖组件
57* osal_aos
58
59# 常用配置
6061
62# API说明
63本组件实现POSIX标准的API,API的使用方式遵循POSIX.1-2017标准的定义,与Unix/Linux上POSIX API使用方式一致。具体使用方法可以参考POSIX标准的官方文档[POSIX.1-2017标准](https://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html)64
65# 使用示例
66
67组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。
68待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
69
70## 步骤1 创建或打开工程
71
72**打开已有工程**
73
74如果用于测试的案例工程已存在,可参考[《AliOS Things集成开发环境使用说明之打开工程》](https://help.aliyun.com/document_detail/302381.html)打开已有工程。
75
76**创建新的工程**
77
78组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)79
80## 步骤2 添加组件
81
82案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:
83
84```yaml
85
86depends:
87  - posix: master          # helloworld_demo中引入posix组件
88
89```
90
91## 步骤3 下载组件
92
93在已安装了  的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
94
95```shell
96
97aos install posix
98
99```
100
101上述命令执行成功后,组件源码则被下载到了./components/posix路径中。
102
103## 步骤4 添加示例
104
105在posix组件的package.yaml中添加[example示例代码](https://gitee.com/alios-things/posix/tree/master/example)106
107```yaml
108source_file:
109  - "src/*.c"
110  - "example/pthread_example.c"
111```
112
113## 步骤5 编译固件
114
115在示例代码已经添加至组件的配置文件,并且helloworld_demo已添加了对该组件的依赖后,就可以编译helloworld_demo案例来生成固件了,具体编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)116
117## 步骤6 烧录固件
118
119helloworld_demo案例的固件生成后,可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)来烧录固件。
120
121## 步骤7 打开串口
122
123固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)124
125当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
126
127## 步骤8 测试示例
128
129**CLI命令行输入:**
130```shell
131
132pthread_example # 执行pthread示例
133
134```
135
136> 关键日志:
137```shell
138
139new thread:0x34038460, arg:10
140new thread hold the lock.
141Main thread hold the lock.
142retval:0x34003aa8, &ret_value:0x34003aa8
143New thread:0x34038460 exited with vaule: 100
144The count is 11
145pthread_example test success!
146
147```
148
149# 注意事项
1501. POSIX API的使用方式虽然与POSIX标准一致,但相同API的子功能项可能是不支持的,此时注意判断API的异常处理(返回值和errno),如API有子功能项不支持,会设置errno为ENOTSUP并返回-1,或者直接返回ENOTSUP,具体需要查看不同API的标准定义。
151
152# FAQ
153154