嵌入式应用程序设计综合教程第4章

合集下载

嵌入式系统第4章PPT教学课件

嵌入式系统第4章PPT教学课件
地址
#define RdURXH0() (*(volatile unsigned char *) 0x50000024) …… *Revdata=RdURXH0();
程序中宏调用*Revdata=RdURXH0( )的功能为: 将(2020/012x/0950000024)中的数据送到* Revdata 中 12
定义后,程序中rUTRSTAT0代表(0x50000010)中的数
例:
#define rUTRSTAT0 (*(volatile unsigned char *) 0x50000010) ……
while(!(rUTRSTAT0 & 0x1));
(0x50000010)中的数和1“与”后取反作为循环判断的条件
例2:#define U8 nsigned char,其作用是定义 后在程序中的U8 都用unsigned char代替
2020/12/09
8
宏定义的基本思想是:一次定义,多次使用 其优点是:
可以用标识符来代替长的数据,减少需要 输入的数据或字符串;
用易于理解的标识符来代替那些不太好记 的具体的数据,便于程序的理解和维护;
^ 异或操作;例:a=a ^ a
~ 取反操作;例:c= ~ c
>> 右移操作;例:d=8 >>3
<< 左移操作; 例:r=0x1 <<15
2020/12/09
PRSCVL =49<<6 14
练习:
#define ADCCON_FLAG (0x1<<15) #define ADCCON_ENABLE_START_BYREAD
4.4 预处理指令
预处理指令:文件包含预处理指令 宏定义预处理指令 条件编译预处理指令 #pragma

嵌入式课程设计带程序

嵌入式课程设计带程序

嵌入式课程设计带程序一、教学目标本课程旨在通过嵌入式程序设计的学习,使学生掌握基本的程序设计原理,培养学生运用嵌入式系统解决问题的能力。

具体目标如下:知识目标:使学生了解嵌入式系统的基本概念、工作原理和编程方法;掌握C语言的基本语法和编程技巧;理解嵌入式系统的设计和开发流程。

技能目标:培养学生运用嵌入式系统进行程序设计的能力;能够独立完成简单的嵌入式项目开发,具备一定的实际操作经验。

情感态度价值观目标:培养学生对嵌入式技术的兴趣和好奇心,激发学生主动探索和创新的精神;使学生认识到嵌入式技术在现代社会中的重要作用,提高学生的社会责任感和使命感。

二、教学内容本课程的教学内容主要包括嵌入式系统的基本概念、C语言编程、嵌入式系统的设计和开发流程等方面。

具体安排如下:第一章:嵌入式系统概述,介绍嵌入式系统的定义、特点、分类和应用领域;第二章:C语言编程基础,讲解C语言的基本语法、数据类型、运算符、表达式和程序结构;第三章:嵌入式系统设计,介绍嵌入式系统的设计原则、开发流程和常用开发工具;第四章:嵌入式程序设计,讲解嵌入式程序设计的基本方法、技巧和常见问题;第五章:嵌入式系统应用案例分析,分析实际嵌入式项目的开发过程和应用实例。

三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学。

具体方法如下:1.讲授法:通过教师的讲解,使学生了解嵌入式系统的基本概念和原理;2.案例分析法:通过分析实际案例,使学生掌握嵌入式程序设计的方法和技巧;3.实验法:通过动手实践,培养学生的实际操作能力和创新意识;4.讨论法:学生进行小组讨论,激发学生的思考和探究精神,提高学生的沟通能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:选用国内权威的嵌入式系统教材,为学生提供系统的理论知识;2.参考书:提供相关的参考书籍,丰富学生的知识体系;3.多媒体资料:制作精美的PPT课件,辅助学生理解和记忆教学内容;4.实验设备:提供相应的实验设备和工具,让学生能够亲自动手实践,提高实际操作能力。

嵌入式系统程序设计

嵌入式系统程序设计


开发评估电路板并不是嵌入式应用开发必须的,对于有经验的 工程师完全可以自行独立设计自己的应用电路板和根据开发需 要设计实验板。

好的评估电路板一般文档齐全,对处理器的常用功能模块和主
流应用都有硬件实现,并提供电路原理图和相关开发例程与源 代码供用户设计自己的应用目标板和应用程序作参考。
4.嵌入式软件开发的可移植性和可设计方案评估
满足
完善初步方案,对方案 实施详细设计
详细设计阶段
硬件设计
软件设计
硬件功能测试
硬件测试软件
引导程序编写
操作系统移植
驱动程序开发
测试软件编写
元器件选型
软硬件集成测试阶段
对系统软硬件进行综合测 试,验证系统设计功能
对系统功能、性能、可靠性 进行综合评测
原理图设计
嵌入式系统原理及应用教程
课号:0123305810-100 任课教师:栗华 sdlh@
第四章 嵌入式系统程序设计
本章包含嵌入式系统开发平台介绍,嵌入式汇编程 序设计,嵌入式C语言程序设计及混合编程。

本章内容
4.1 嵌入式系统开发流程 4.2 ARM开发软件及实用工具介绍
4.3 ARM汇编语言程序设计基础

在嵌入式软件的开发过程中,在确保软件的正确性、实时性的前提 下,必须关注软件的可移植性和可重用性。 。

可移植性和可重用性的程度应该根据实际的应用情况来考虑。因为 嵌入式应用软件有自身的许多特点。追求过高的可移植性和可重用 性可能会恶化应用软件的实时性能和增加软件的代码量,这对于资
源有限的嵌入式应用环境是得不偿失的。
目标开发系统
设备程序员
调试 与下 载阶 段
嵌入式软件开发流程图

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲

《嵌入式系统》课程教学大纲学分:3学时:64适用专业:电子信息、通信技术前导课程:电路分析基础、模拟电路、数字电路、高频电路、单片机原理、C语言后续课程:一、课程的性质和任务本课程围绕目前流行的32位ARM处理器和嵌入操作系统,讲述嵌入式系统的概念、软硬件组成、开发过程以及嵌入式应用程序和驱动程序的开发设计方法。

《嵌入式系统》是培养学生具有嵌入式系统的应用知识、嵌入式系统的初步分析能力和具有使用RTOS (实时操作系统)构成嵌入式系统的应用能力等方面的学科,是电子信息与计算机类或相关工科专业的一门专业课。

二、课程的教学基本要求本课程是一门综合性、实践性、应用性很强的专业课。

课程教学所要达到的目的是:使学生掌握嵌入式系统体系结构,嵌入式处理器结构(ARM架构为主),异常处理、系统控制过程、存储处理、ARM内部资源、各种I/O接口;嵌入式系统开发应用方法;实时多任务操作系统。

本课程将为学生今后从事嵌入式系统研究与开发打下坚实的基础。

三、教学内容和要求(一)理论教学内容和要求第一章:嵌入式系统的概况1、讲授内容:主要讲解嵌入式系统的定义、嵌入式系统的分类、嵌入式系统的组成及嵌入式系统的应用领域和发展趋势。

2、基本要求:使学生明确学习本课程的目的。

第二章:嵌入式系统的硬件基本知识1、讲授内容:1、ARM体系的硬件架构2、冯.诺依曼体系结构和哈佛体系结构3、RISC体系结构4、流水线技术2、基本要求:了解嵌入式系统的硬件基础。

第三章:嵌入式操作系统1、讲授内容:1、嵌入式操作系统的分类2、嵌入式操作系统的特点3、实时操作系统4、目前市场上流行的嵌入式操作系统2、基本要求:掌握嵌入式操作系统的分类和特点,明确实时操作系统的内核特点第四章:ARM架构的嵌入式微处理器1、讲授内容:目前基于ARM架构的嵌入式微处理器:I44B0,2410,LPC2000的架构及特点。

2、基本要求:要求掌握不同处理的的特点及使用场合。

第4章 嵌入式系统程序设计基础(第二版)

第4章 嵌入式系统程序设计基础(第二版)

例题
题目:用预处理指令#define 声明一个常数,用以表
明1年中有多少秒(忽略闰年问题)。
分析:
两种错误写法: #define SECONDS 60 * 60 * 24 * 365 #define SECONDS (60 * 60 * 24 * 365)
正确答案:
#define SECONDS (60 * 60 * 24 * 365)UL
逻辑表达式及运算符(2)
“=”、“>”、“<”、“>=”、“<= ”、“/=”、 “ <>” 运算符 示例: X <> Y 表示X不等于Y。 “LAND”、“LOR”、“LNOT”及“LEOR” 运算符 示例: X:LAND:Y 表示将X和Y 作逻辑与的操作
mwhua@
字符串表达式及运算符(3)
8. 9.
mwhua@
4.2 汇编语言的语句格式
ARM(Thumb)汇编语言的语句格式为: {标号} {指令或伪指令} {;注释}
返回
ቤተ መጻሕፍቲ ባይዱ
每一条指令的助记符可以全部用大写、或全部 用小写,但不许在一条指令中大、小写混用 长语句若分为多行来书写,在行的末尾用“\” 表示下一行与本行为同一条语句
汇编控制伪指令
汇编控制伪指令用于控制汇编程序的执行流
程,常用的汇编控制伪指令包括以下几条: (1)IF、ELSE、ENDIF (2)WHILE、WEND (3)MACRO、MEND (4)MEXIT 语法格式:
示例: GBLL Test …… GBLA Counter IF Test3 = TRUE Counter SETA 指令序列1 …… ELSE Counter < 10 WHILE 指令序列2 指令序列 ENDIF WEND

《嵌入式应用程序设计综合教程(微课版)》读书笔记模板

《嵌入式应用程序设计综合教程(微课版)》读书笔记模板

5.1线程基本编程 5.2线程之间的同步与互斥 5.3线程属性 5.4实验内容—多线程编程 小结 思考与练习
6.1络体系结构 6.2络基础编程 6.3服务器模型 小结 思考与练习
7.1络超时检测 7.2广播 7.3组播 7.4 UNIX域套接字 小结 思考与练习
读书笔记
这是《嵌入式应用程序设计综合教程(微课版)》的读书笔记模板,可以替换为自己的心得。
2.1 Linux文件 I/O概述 2.2文件 I/O操作 2.3实验内容—生产者和消费者 小结 思考与练习
3.1 Linux下多任务机制的介绍 3.2进程编程 3.3实验内容—编写多进程程序 小结 思考与练习
4.1 Linux下进程间通信概述 4.2管道通信 4.3信号通信 4.4信号量 4.5共享内存 4.6消息队列 4.7实验内容 小结 思考与练习
嵌入式应用程序设计综合教程 (微课版)
读书笔记模板
01 思维导图
03 目录分析 05 精彩摘录
目录
02 内容摘要 04 读书笔记 06 作者介绍
思维导图
本书关键字分析思维导图
专业
网络
综合
概念
标准
方法
第章
设计
编程
计算机 编程
进程
教程
小结
概述
实验
通信
Байду номын сангаас内容
消息
内容摘要
本书结合大量实例,讲解了嵌入式应用程序设计的核心概念和基本方法。主要内容包括标准I/O编程、文件 I/O编程、多任务编程、进程间通信、多线程编程、Linux络编程等。重视应用是贯穿全书的最大特点,本书在各 章多处设置了微课,帮助读者攻克重点与难点。本书可以作为院校嵌入式相关专业和计算机相关专业的教材,也 可以作为计算机软硬件培训班教材,还可供嵌入式研究方向的专业人员和广大计算机爱好者自学使用。

四、嵌入式程序设计


CodeWarrior环境下汇编程序框架
AREA ENTRY start Add,CODE, READONLY
Addop stop
MOV MOV ADD MOV LDR SWI END
R0, #1 R1, #2 R0, R0, R1 R0, #0X18 R1, =0X20026 0x123456
程序开始的AREA Add,CODE, READONLY定 义了一个代码段. 2) 第二句汇编语句的ENTRY是一个伪指令,相当于c 语言中的main()函数,用来标识一个代码段的入口. 3) Stop部分的作用是将程序的控制权力转交给调试 器,其中需要完成3部分的工作. ①在寄存器R0中写入操作的类型. R0 ②在R1中写入程序的状态参数. ③使用SEI将控制权转交给调试器. 4) 程序最后以END伪指令结尾,END伪指令必须和 ENTRY配对使用.
2.数据定义伪操作
数据定义伪操作用于数据表定义,文字池定 义和数据空间分配等,如下所述: (1)LTORG —声明一个文字池. (2)MAP — 定义一个结构化的内存表的首地址. (3)FIELD — 定义结构化内存表中的一个数据域. (4)SPACE — 分配一块内存单元. (5)DCB — 分配一段字节的内存单元并用指定的数据 初始化.
1)
4.1.2 ARM汇编语言的伪操作,伪指令与 汇编语言的伪操作, 汇编语言的伪操作 宏指令
在ARM汇编语言中,伪操作是ARM汇编语言 程序里的一些特殊指令助记符,作用主要是为完 成汇编程序做各种准备工作,在源程序进行汇编 时由汇编程序处理,而不是在程序运行期间由CPU执 行.而伪指令 伪指令是ARM汇编语言程序里的特殊指令助记 伪指令 符,在处理器运行期间不执行,它们在汇编时将被相应 的机器指令代替成ARM或Thumb指令,从而实现指令 操作.宏指令是一段独立的程序代码,可插入到 源程序中,通过伪操作来定义.

2019精品上的嵌入式系统设计实例 教学课件 赵峰 第4章文档


第4章 基于MicroBlaze的基础实验
4.1.2 分析已创建工程
点击Project→Generate and View Block Diagram,在示意 图中显示硬件设计。在System标签下,可以看见已创建的 工程文件。使用系统连接图回答以下各问题。
(1) 点击Project→Generate and View Block Diagram打开 模块图(见图4.1.17),观察已创建设计中的各个组成部分。
图4.1.10 “Configure IO Interfaces”对话框
第4章 基于MicroBlaze的基础实验
注意:每个窗口显示的外围设备的数量取决于显示器 的分辨率。
② 点击“Next”按钮,显示“Configure Additional IO Interfaces”对话框(见图4.1.11),未选中其余设备。
第4章 基于MicroBlaze的基础实验
图4.1.1 完整设计
第4章 基于MicroBlaze的基础实验
这次实验,读者将会使用XPS系统的BSB创建一个处 理器系统,该系统由下列处理器IP组成(见图4.1.2,其中深 色方框表示):
● MicroBlaze。 ● opb_mdm。 ● OPB总线。 ● BRAM的LMB BRAM控制器。 ● BRAM。 ● 串行传输的UART。 ● LEDs的GPIO。
第4章 基于MicroBlaze的基础实验
图4.1.17 创建系统的模块图
第4章 基于MicroBlaze的基础实验
读者在模块图上滚动鼠标滚轮以放大或缩小视图, 可以看到MicroBlaze处理器、LMB控制器和连接 MicroBlaze处理器的opb总线。
(2) 下拉模块图,观察I/O端口的图示。 (3) 关闭模块图。 (4) 在系统连接图中,点击加号按钮,观察系统展开 后详细的连接总线(见图4.1.18)。

刘彦文等《Linux环境嵌入式系统开发基础》第4章


⒈ 电路模块中的功耗 微处理器中CMOS电路模块的功耗与三个因素有 关:加在电路模块上的电压、电路开关(切换) 的频率、泄漏电流,其中前两项为主要因素。 ⑴ 电压 功耗与加在电路模块上的电压的平方成正比, 例如同样的电路模块,在5V电压、3.3V电压下 都可以工作,那么选择在3.3V下工作,功耗可 以降低52/32=2.29。
4.1.3 时钟与电源管理用到的S3C2410A引脚信号 表4-1(p97)列出了部分S3C2410A的引脚信号及 它们的含义,它们是时钟与电源管理所用到的。 另外,将Reset相关引脚信号也一并放在这里介 绍。
4.2 时钟管理
4.2.1 时钟与电源管理结构框图 时钟与电源管理结构框图见图4.1(p98)。
参见图4.1,虽然在启动后MPLL就接通(ON状 态),但是MPLL的输出Mpll,在软件写一个合 法的设置值到MPLL控制寄存器MPLLCON以前, 不会作为系统时钟。在合法的值设置以前,从 外部晶振或EXTCLK来的时钟源将被直接地用作 系统的时钟。即使用户不需要改变MPLLCON寄 存器中的缺省值,用户也应该写相同的值到 MPLLCON寄存器。 另外,当OM[1:0]=11时,OM[3:2]被用作确定 测试模式。
4.1.2 时钟与电源管理概述 S3C2410A片内集成了时钟与电源管理模块,该模块由 三部分组成:时钟控制、USB控制和电源控制。 时钟与电源管理有以下特点。 (1) 时钟与电源管理模块内有两个锁相环(Phase Locked Loop,PLL),一个称为主锁相环MPLL,产生三种时 钟信号,FCLK用于ARM920T;HCLK用于AHB总线设备 和ARM920T;PCLK用于APB总线设备。另一个称为 USB锁相环UPLL,产生的时钟信号UCLK(48MHz)用 于USB。

信号量编程_嵌入式应用程序设计综合教程(微课版)_[共5页]

第4章 Linux 进程间通信97 最简单的信号量只有0和1两种值,这种信号量被称为二值信号量。

在本节中,主要讨论二值信号量。

二值信号量的应用比较容易扩展到使用多值信号量的情况。

4.4.2 信号量编程1.函数说明在Linux 系统中,使用信号量通常分为以下几个步骤。

(1)创建信号量或获得系统已存在的信号量,此时需要调用semget()函数。

不同进程通过使用同一个信号量键值来获得同一个信号量。

(2)初始化信号量,此时使用semctl()函数的SETVAL 操作。

当使用二维信号量时,通常将信号量初始化为1。

(3)进行信号量的PV 操作,此时调用semop()函数。

这一步是实现进程之间的同步和互斥的核心工作部分。

(4)如果不需要信号量,则从系统中删除它,此时使用semclt()函数的IPC _RMID 操作。

需要注意的是,在程序中不应该出现对已经被删除的信号量的操作。

2.函数格式表4.12所示为semget()函数的语法要点。

表4.12 semget()函数语法要点所需头文件 #include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>函数原型 int semget(key _t key, int nsems, int semflg);key:信号量的键值,多个进程可以通过它访问同一个信号量。

其中有个特殊值IPC _PRIVATE,用于创建当前进程的私有信号量nsems:需要创建的信号量数目,通常取值为1函数传入值 semflg:同open()函数的权限位,也可以用八进制表示法,其中使用IPC _CRE AT 标志创建新的信号量,即使该信号量已经存在(具有同一个键值的信号量已在系统中存在),也不会出错。

如果同时使用IPC _EXCL 标志可以创建一个新的唯一的信号量,此时如果该信号量已经存在,该函数会返回出错成功:信号量标识符,在信号量的其他函数中都会使用该值函数返回值 出错:−1表4.13所示为semctl()函数的语法要点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

只有在管道的读端存在时,向管道中写入数据才有意义。否则,向管道中写 入数据的进程将收到内核传来的SIGPIPE信号(通常Broken pipe错误)。
FIFO

无名管道只能用于具有亲缘关系的进程之间,这就限制了无名管道的使用范 围 有名管道可以使互不相关的两个进程互相通信。有名管道可以通过路径名来 指出,并且在文件系统中可见 进程通过文件IO来操作有名管道 有名管道遵循先进先出规则




不支持如lseek() 操作
FIFO
所需头文件
#include <unistd.h> #include <fcntl.h> #include <sys/types.h> int mkfifo(const char *filename,mode_t mode); filename:要创建的管道。 mode: 指定创建的管道的访问权限,一般用8进制数表 示
SIGINT
SIGQUIT SIGILL
SIGFPE
终止
信号通信
信号名 SIGKILL 含义 默认操作 该信号用来立即结束程序的运行,并且不能被阻塞、 终止 处理和忽略。 该信号当一个定时器到时的时候发出。 该信号用于暂停一个进程,且不能被阻塞、处理或 忽略。 该信号用于暂停交互进程,用户可键入SUSP字符 (通常是Ctrl-Z)发出这个信号。 子进程改变状态时,父进程会收到这个信号 终止 暂停进程 暂停进程
SIGALRM SIGSTOP SIGTSTP
SIGCHLD
忽略
SIGABORT
该信号用于结束进程
终止
信号发送与捕捉

kill()和raise()

kill函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组 (实际上,kill系统命令只是kill函数的一个用户接口)。 kill –l 命令查看系统支持的信号列表


Linux继承了上述所有的通信方式
Linux下进程间通信概述

常用的进程间通信方式

传统的进程间通信方式 无名管道(pipe)、有名管道(fifo)和信号(signal) System V IPC对象 共享内存(share memory)、消息队列(message queue)和信号灯 (semaphore) BSD 套接字(socket)
EROFS
参数filename指定的文件存在于只读文件系统内
典型的FIFO模型
信号通信

信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利 用它来通知用户空间进程发生了哪些系统事件。 如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程 恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被 延迟,直到其阻塞被取消时才被传递给进程
函数原型 函数传入值
函数返回值
成功:0
出错:-1
FIFO
EACCESS 参数filename所指定的目录路径无可执行的权限
EEXIST ENAMETO OLONG
ENOENT ENOSPC
参数filename所指定的文件已存在 参数filename的路径名称太长
参数filename包含的目录不存在 文件系统的剩余空间不足


信号通信

信号的生存周期
•内核进程 •信号产生 •用户进程 • 信 号 注 册
• 信 号 注 销
•信号处理

用户进程对信号的响应方式:

忽略信号:对信号不做任何处理,但是有两个信号不能忽略:即SIGKILL及SIGSTOP。 捕捉信号:定义信号处理函数,当信号发生时,执行相应的处理函数。 执行缺省操作:Linux对每种信号都规定了默认操作
进程间通信
Linux下进程间通信概述
UNIX平台进程通信方式

早期进程间通信方式 AT&T的贝尔实验室,对Unix早期的进程间通信进行了改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内 BSD(加州大学伯克利分校的伯克利软件发布中心),跳过了该限制,形成了基于套接字 (socket)的进程间通信机制
信号处理流程
使用信号的场合

后台进程需要使用信号,如xinetd 如果两个进程没有亲缘关系,无法使用无名管道 如果两个通信进程之一只能使用标准输入和标准输出,则无法使用FIFO


信号通信
信号名 SIGHUP 含义 默认操作 该信号在用户终端连接(正常或非正常)结束时发出, 终止 通常是在终端的控制进程结束时,通知同一会 话内的各个作业与控制终端不再关联。 该信号在用户键入INTR字符(通常是Ctrl-C)时发出, 终止 终端驱动程序发送此信号并送到前台进程中的 每一个进程。 该信号和SIGINT类似,但由QUIT字符(通常是 Ctrl-\)来控制。 该信号在一个进程企图执行一条非法指令时(可执 行文件本身出现错误,或者试图执行数据段、 堆栈溢出时)发出。 该信号在发生致命的算术运算错误时发出。这里不 仅包括浮点运算错误,还包括溢出及除数为0等 其它所有的算术的错误。 终止 终止
读端
•fd[0]
•fd[1]
写端
rea d
•内核 •管道
writ e
管道读写注意点

当管道中无数据时,读操作会阻塞 向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区 域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数 据,那么写操作将会一直阻塞。




无名管道
进程1
进程2
内核 管道
无名管道

这里所说的管道主要指无名管道,它具有如下特点: 只能用于具有亲缘关系的进程之间的通信


半双工的通信模式,具有固定的读端和写端
管道可以看成是一种特殊的文件,对于它的读写可以使用文件IO如read、 write函数。

管道创建与关闭

管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件 描述符fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道。 构成了一个半双工的通道。


用户进程 fd[0] fd[1]

内核 管道
管道创建与关闭
所需头文件
#include <un来自std.h>函数原型
int pipe(int fd[2])
函数参数
fd:包含两个元素的整型数组
函数返回值
成功:0
出错:-1
管道的读写
•父进程 •子进程
读端
•fd[0]
•fd[1]
写端
相关文档
最新文档