06-1-多进程程序
51单片机应用技术(C语言版)习题答案(1)

解:计数初值X=216- T/T机=65536-1000/1=64536=FC18H
则TH0 = 0xfc
TL0 = 0x18
定时器0方式1时,TMOD=0x01
查询法参考程序:
#include<reg51.h>
同级或低级中断请求不能打断正在执行的中断;
同级中断源同时提出请求时按自然优先级响应:
单片机复位时,IP各位都被置0,所有中断源为低级中断。
自然优先级顺序是:/INT0→ T0 → /INT1→T1→TI/RI
5.答:有一按键接到单片机外部中断0引脚上,要求编程对按键动作进行计数和显示,达到99后重新由0开始计数(采用中断方式)。
答:MCS-51单片机的存储器采用的是哈佛结构,即把程序存储器和数据存储器分开,有各自的寻址系统、控制信号和功能。
MCS-51单片机存储器的最大寻址空间64KB。
4.MCS-51单片机的时钟周期,状态周期,机器周期,指令周期的含义是什么?当晶振频率为6MHZ时,它们分别为多少?
答:时钟周期:由振荡电路产生的时钟脉冲的周期;
MCS-51单片机提供了4个8位的I/O端口,分别命名为P0、P1、P2、P3,这些端口既可以按字节一次输入或输出8位数据,同时它们的每一位都可以独立进行输出或输出操作。
MCS-51单片机内部有两个16位的定时器/计数器,既可以做定时功能,又可以做计数功能。
2.MCS-51单片机的P0-P3口在功能上各有什么用途和区别?当它们做I/O口使用时,具有哪些特点?
sbit p1_0=P1^0;
void main()
{
TMOD=0x01;
FANUCiom说明书1

第一篇:编程- 5 - 1.综述-5- 1.1可编程功能-5- 1.2准备功能-5-1.3辅助功能-6-2.插补功能-7- 2.1快速定位(G00)-7- 2.2直线插补(G01)-8-2.3圆弧插补(G02/G03)-8-3.进给功能-9- 3.1进给速度-9- 3.2自动加减速控制-10- 3.3切削方式(G64)-10- 3.4精确停止(G09)及精确停止方式(G61) -10-3.5暂停(G04) -10-4.参考点和坐标系-10- 4.1机床坐标系-10- 4.2关于参考点的指令(G27、G28、G29及G30) -11- 4.2.1 自动返回参考点(G28)- 11 - 4.2.2 从参考点自动返回(G29)- 11 - 4.2.3 参考点返回检查(G27)- 11 - 4.2.4 返回第二参考点(G30)- 11 - 4.3工件坐标系-13- 4.3.1 选用机床坐标系(G53)- 13 - 4.3.2 使用预臵的工件坐标系(G54~G59)- 13 - 4.3.3 可编程工件坐标系(G92)- 14 - 4.3.4 局部坐标系(G52) - 14 -4.4平面选择-14-5.坐标值和尺寸单位-15-5.1绝对值和增量值编程(G90和G91)-15-6.辅助功能-15- 6.1M代码-15- 6.1.1 程序控制用M代码- 15 - 6.1.2 其它M代码- 16 - 6.2 T代码-16- 6.3主轴转速指令(S代码) -16-6.4刚性攻丝指令(M29)-16-7.程序结构-16- 7.1程序结构-16- 7.1.1 纸带程序起始符(Tape Start) - 17 - 7.1.2 前导(Leader Section) - 17 - 7.1.3 程序起始符(Program Start) - 17 - 7.1.4 程序正文(Program Section) - 17 - 7.1.5 注释(Comment Section) - 17 - 7.1.6 程序结束符(Program End) - 17 - 7.1.7 纸带程序结束符(Tape End) - 17 - 7.2程序正文结构-17- 7.2.1 地址和词- 17 -7.2.2 程序段结构- 18 -7.2.3 主程序和子程序- 18 -8.简化编程功能-20- 8.1孔加工固定循环(G73,G74,G76,G80~G89) -20- 8.1.1 G73(高速深孔钻削循环)- 23 - 8.1.2 G74(左螺纹攻丝循环)- 24 - 8.1.3 G76(精镗循环) - 24 - 8.1.4 G80(取消固定循环) - 25 - 8.1.5 G81(钻削循环) - 25 - 8.1.6 G82(钻削循环,粗镗削循环) - 25 - 8.1.7 G83(深孔钻削循环) - 26 - 8.1.8 G84(攻丝循环) - 26 - 8.1.9 G85(镗削循环) - 27 - 8.1.10 G86(镗削循环) - 27 - 8.1.11 G87(反镗削循环) - 27 - 8.1.12 G88(镗削循环) - 28 - 8.1.13 G89(镗削循环) - 28 - 8.1.14 刚性攻丝方式- 29 -8.1.15 使用孔加工固定循环的注意事项- 29 -9.刀具补偿功能-30- 9.1刀具长度补偿(G43,G44,G49) -30- 9.2刀具半径补偿-30- 9.2.1 补偿向量- 30 - 9.2.2 补偿值- 30 - 9.2.3 平面选择- 30 - 9.2.4 G40、G41和G42 - 30 - 9.2.5 使用刀具半径补偿的注意事项- 31 -第二篇:NC操作- 32 -1.自动执行程序的操作-32- 1.1CRT/MDI操作面板-32- 1.1.1 软件键- 32 - 1.1.2 系统操作键- 32 - 1.1.3 数据输入键- 32 - 1.1.4 光标移动键- 32 - 1.1.5 编辑键和输入键- 32 - 1.1.6 NC功能键- 32 - 1.1.6 电源开关按钮- 32 - 1.2MDI方式下执行可编程指令-33- 1.3自动运行方式下执行加工程序-33- 1.3.1 启动运行程序- 33 -1.3.2 停止运行程序- 33 -2.程序验证和安全功能-33- 2.1程序验证功能-33- 2.1.1 机床闭锁- 33 - 2.1.2 Z轴闭锁- 33 - 2.1.3 自动进给的倍率- 34 - 2.1.4 快速进给的倍率- 34 - 2.1.5 试运行- 34 - 2.1.6 单程序段运行- 34 -2.2安全功能-34- 2.2.1 紧急停止- 34 -2.2.2 超程检查- 34 -3.零件程序的输入、编辑和存储-34- 3.1新程序的注册-34- 3.2搜索并调出程序-34- 3.3插入一段程序-35- 3.4删除一段程序-35- 3.5修改一个词-35-3.6搜索一个词-35-4.数据的显示和设定-36- 4.1刀具偏臵值的显示和输入-36- 4.2G54~G59工件坐标系的显示和输入-36- 4.3NC参数的显示和设定-36-4.4刀具表的修改-37-5.显示功能-37- 5.1程序显示-37-5.2当前位臵显示-37-6.在线加工功能-38- 6.1有关参数的修改:-38-6.2有关在线加工的操作. 错误!未定义书签。
编译原理-陈火旺版-第一章

编译器的作用与重要性
01
编译器是将高级语言程序翻译成机器语言程序的软件工具,是 软件开发的基础设施之一。
02
编译器可以提高程序的执行效率,使得程序能够在各种计算机
上运行。
编译器还可以对程序进行优化,提程简介
01
02
03
词法分析
将输入的源程序分解成一 个个的单词符号,即词法 单元。
词法分析器的构造
构造原理
根据词法规则构造出识别相应单 词符号的有限自动机,然后将有 限自动机转换为对应的程序代码
构造方法
手工构造法、自动生成法
注意事项
处理好单词符号的二义性问题; 识别出源程序中的错误并进行适 当的处理。
04
语法分析
语法分析概述
语法分析的任务
根据语言的语法规则,对输 入的符号序列进行合法性检 查,并构造出相应的语法结
中间代码的形式
常见的中间代码形式有三地址码、四元式、树形表示等。
中间代码生成算法
根据源程序的语法结构和语义规则,生成相应的中间代码序列。
符号表管理
符号表的作用
符号表用于记录源程序中各种标识符的属性信息,如类型、作用域 和存储地址等。
符号表的组织方式
常见的符号表组织方式有线性表、散列表和树形结构等。
循环优化
通过循环展开、循环合并、循环交换等技术来改进循环的性能。
目标代码生成方法
机器无关代码生成
机器相关代码生成
生成与特定机器无关的中间代码,然后在 运行时将其转换为特定机器上的目标代码 。
直接生成特定机器上的目标代码,这需要 考虑机器的指令集、寄存器分配、内存访 问等因素。
汇编语言代码生成
高级语言虚拟机代码生成
宏程序1

一变量普通加工程序直接用数值指定G代码和移动距离;例如,GO1和X100.0。
使用用户宏程序时,数值可以直接指定或用变量指定。
当用变量时,变量值可用程序或用MDI面板上的操作改变。
#1=#2+100G01 X#1 F300说明:变量的表示计算机允许使用变量名,用户宏程序不行。
变量用变量符号(#)和后面的变量号指定。
例如:#1表达式可以用于指定变量号。
此时,表达式必须封闭在括号中。
例如:#[#1+#2-12]变量的类型变量根据变量号可以分成四种类型变量号变量类型功能#0空变量该变量总是空,没有值能赋给该变量.#1-#33局部变量局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空.调用宏程序时,自变量对局部变量赋值,#100-#199#500-#999公共变量公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199初始化为空.变量#500-#999的数据保存,即使断电也不丢失.#1000系统变量系统变量用于读和写CNC运行时各种数据的变化,例如,刀具的当前位置和补偿值.变量值的范围局部变量和公共变量可以有0值或下面范围中的值:-1047到-10-29或-10-2到-1047如果计算结果超出有效范围,则发出P/S报警NO.111.小数点的省略当在程序中定义变量值时,小数点可以省略。
例:当定义#1=123;变量#1的实际值是123.000。
变量的引用为在程序中使用变量值,指定后跟变量号的地址。
当用表达式指定变量时,要把表达式放在括号中。
例如:G01X[#1+#2]F#3;被引用变量的值根据地址的最小设定单位自动地舍入。
例如:当G00X#/;以1/1000mm的单位执行时,CNC把123456赋值给变量#1,实际指令值为G00X12346.改变引用变量的值的符号,要把负号(-)放在#的前面。
例如:G00X-#1当引用未定义的变量时,变量及地址都被忽略。
例如:当变量#1的值是0,并且变量#2的值是空时,G00X#1 Y#2的执行结果为G00X0。
Citrix PoC手册 - 1 基础环境 - Lab 06 客户端配置和访问

标准化实施方案| 白皮书| Citrix XenDesktopPOC标准化实施指南基础环境06 客户端配置和访问版本:v1.0.1第1章主要步骤 (3)第2章环境检查 (3)第3章安装配置 (3)3.1 Windows Receiver客户端安装配置 (3)3.2 验证Windows Receiver (13)3.3 iPad Receiver安装配置 (18)3.4 验证iPad Receiver (25)3.5 iPhone Citrix Receiver安装配置 (26)3.6 验证iPhone Citrix Receiver (28)产品版本 (31)修正历史 ................................................................................................................ 错误!未定义书签。
第1章主要步骤∙Windows Receiver客户端的安装和配置∙iPad Receiver客户端安装和配置∙iPhone Receiver客户端安装和配置∙验证Receiver工作正常第2章环境检查∙XenApp和XenDesktop架构搭建完成,正常运行∙了解并准备Web Interface的连接地址∙已经创建好用于Receiver连接的连接账号∙准备一台Windows 7安装Citrix Receiver客户端的平台∙准备XenDesktop 6.5 光盘安装介质第3章安装配置3.1 Windows Receiver客户端安装配置1. 软件准备可以从2个地方获取Receiver软件∙从互联网Citrix官网下载Receiver软件,下载地址:/∙从XenDestop光盘进行安装,路径:光驱:\Citrix Receiver and Plug-ins\Windows\Receiver\CitrixReceiver.exe注:Xendesktop 5.6光盘和XenApp 6.5光盘Citrix Receiver版本不同,建议使用网上下载的Receiver版本,或者XenDesktop 5.6光盘中的Citrix Receiver软件在本例中使用XenDesktop 5.6的Citrix Receiver软件来进行安装。
DZ0130-2006地质矿产实验室测试质量管理规范1-3部分

ICS 19.020D 00DZ 中华人民共和国地质矿产行业标准DZ/T 0130.1-2006代替DZ 0130.0-1994地质矿产实验室测试质量管理规范第1部份:总则The Specification of testing quality managementFor geological laboratories——Part 1:General rules2006-06-05 2006-09-01 实施中华人民共和国国土资源部发布前言DZ/T0130-2006《地质矿产实验室测试质量管理规范》由16部分组成。
本部分是DZ/T0130-2006中的第1部分。
本部分自实施之日起代替DZ 0130.1-1994《地质矿产实验室测试质量管理规范 1.总则》。
本部与DZ 0130.1-1994相比主要变化如下:——增加了前言、引言、术语、规范性引用文件、基本原则、附录和参考文献等条款;——增加了数据控制、资源保证、记录控制、结果报告、抱怨受理和实验室信息系统(LIS)管理等内容;——采用了测量不确定度的概念;——将DZ0130.1-1994中1.3~1.8的内容归纳在“5.基本要求“章节中;——不再采用“双差”这一概念。
本部分的附录A为资料性附录。
本部分由中华人民共和国国土资源部提出。
本部分由全国国土资源标准化技术委员会地质矿产实验测试分技术委员会归口。
本部分由国家地质实验测试中心、武汉综合岩矿测试中心负责起草。
本部分主起草人:尹明、王苏明、叶家喻、王祖荫、周金生。
本部分于1994年3月首次发布,本次为第一次修订。
地质矿产实验室测试质量管理规范第1部分:总则1 范围本部分规定了地质矿产实验室测试质量管理的相关术语、基本原则和通用基本要求。
本部分适用于地质矿产实验室测试质量管理。
本标准可以作为地质报告和科学研究报告中实验室样品测试质量检查和验收的依据。
注:地质报告是一种全面总结地质勘查工作成果的技术文件,是在指定任务阶段性完成或全部完成后,将各种地质资料综合研究并系统整理编写而成的。
实验二、1简单并行接口
int 21h
mov ah,06 mov dl,0ffh int 21h jnz exit je start exit: mov ah,4ch int 21h code ends end 244程序流程图 ;若无,则转start ;返回DOS ;是否有键按下
八、实验结果
并行输出接口实验结果 并行输入接口实验结果
保存时输入自命名的源程序“XXX.ASM ”
为扩展名)
(“.ASM”
在“Alt+F”中,选择“EXIT ”退出文本编辑环境
3
图1
图2
使用汇编程序MASM.EXE (微软工具),对 源程序进行汇编,生成OBJ文件。 C:\> MASM (进入汇编环境) Source filename [.ASM]: xxx.asm
;返回DOS
code segment assume cs:code
start:
mov dx,2a0h
in al,dx mov dl,al mov ah,02
;从2A0输入一数据
;将所读数据保存在DL中 ;显示ASCII为DL的数据
int 21h
mov dl,0dh int 21h mov dl,0ah ;显示换行符 ;显示回车符
3
使用连接程序LINK.EXE (微软工具),对 OBJ文件进行连接。只有正确的OBJ文件,才能进 行连接操作。将OBJ文件与库函数或其他目标程序
进行连接成可执行的目标程序-EXE文件。
C:\> LINK (进入连接环境) Object Modules [.OBJ]: xxx.obj Run File [XXX.EXE]: List File [NUL.MAP]: Libraries [.LIB]: Warning: No STACK segment (忽略) There was 1 error detected. C:\> XXX.EXE (执行程序)
试题【python一级】知识点_题型word复习知识点试卷试题
试题【python一级】知识点_题型word复习知识点试卷试题一、选择题1.下列选项中,不属于Python合法变量名的是()A.int32 B.40xl C.self D._name_ 2.算法用Python程序实现,以下代码中哪处语句存在语法错误()A.B.C.D.3.以下属于计算机高级语言的是()A.Python B.自然语言C.汇编语言D.机器语言4.下面选项中对Python的转义字符描述错误的是()A.\r 回车B.\n 换行C.\\ 反斜杠符号D.\” 单引号5.下面哪个不是Python合法的标识符()A.int_3 B.printC.count D.__name__6.以下Python程序运行后,变量x和st的值分别是()。
A.801 123678 B.801 “123678”C.801 801 D.123678 “123678”7.Python不支持的数据类型有()。
A.char B.int C.float D.list8.下列不是 Python 程序基本结构的是()。
A.顺序结构B.树形结构C.分支结构D.循环结构9.利用Python求100以内所有能被3整除的正整数,代码如下:则下列程序第3行的横线应该填()A.i=i*3 B.i=i%3 C.i%3==0 D.i/3==1 10.Python中的数据类型float表示()A.布尔型B.整型C.字符串型D.浮点型11.在Python语言中,用来定义函数的关键字是()。
A.return B.def C.function D.import12.运行下列 Python程序,结果正确的是()a=18b=7c=a%bb=a%bprint(a,b)A.18 5 B.5 18 C.18 4 D.4 1813.下列选项中,不属于Python特点的是()。
A.面向对象B.运行效率高C.可读性好D.开源14.Python语句 "ab"+"c"*2 的运行结果是()A.abc2 B.abcabc C.abcc D.ababcc15.下列关于Python语言变量声明的说法中,正确的是()A.Python中的变量不需要声明,变量的赋值操作即是变量声明和定义的过程B.Python中的变量需要声明,变量的声明对应明确的声明语句C.Python中的变量需要声明,每个变量在使用前都不需要赋值D.Python中的变量不需要声明,每个变量在使用前都不需要赋值16.下列选项都是属于高级语言的是( )A.汇编语言、机器语言B.汇编语言、Basic语言C.Basic语言、Python语言D.机器语言、Python语言17.下列哪个语句在Python中是非法的?()A.x = y = z = 1 B.x = (y = z + 1)C.x, y = y, x D.x += y18.除python语言之处,还有很多其他程序设计语言。
06年四级计算机笔试试题(一)
一、选择题(共70题,每题1分,满分70分。
其中(1)-(55)题为中文题,(56)-(70)题为英文题)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。
请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。
(1)或非门的输入变量为X1和X2,输出变量为Y,使输出变量Y为1的X1和X2的值是A)0,0 B)0,1 C)1,0 D)1,1(2)若二进制数原码为-0.0101,则其补码为A)-0.0101 B)0.0101 C)1.1011 D)1.1010(3)所谓指令周期是指A)取指令和取操作数的时间B)执行指令和存储操作结果的时间C)取操作数和执行指令的时间D)取指令和执行指令的时间(4)队列适用于下列哪一种应用?A)表达式求值B)堆排序算法的实现C)树的层次次序周游算法的实现D)二叉树对称序周游算法的实现(5)以下关于广义表的叙述中,正确的是A)广义表是0个或多个单元素或子表组成的有限序列B)广义表至少有一个元素是子表C)广义表不可以是自身的子表D)广义表不能为空表(6)对N个记录的文件进行快速排序,所需要的辅助存储空间为A)O( ) B)O C)O( ) D)O( )(7)下面的有向图,其结点可以排成多少个不同的拓扑序列?A)3 B)5 C)7 D)9(8)如下所示是一棵5阶B树,该B树现在的层数为2。
从该B树中删除关键码38后,该B树的第2层的结点数为A)6 B)7 C)8 D)9(9)设G = 为任意一个群,下列结论中不一定为真的是A)a,b,x A,方程a﹡x = b的解为x = a-1﹡bB)a,b,c A,若a﹡b = a﹡c,则b = cC)a,b A,则a﹡b = b﹡aD)a,b,c A,则(a﹡b)﹡c = a﹡(b﹡c)(10)设A,B为任意二集合,已知A-B = A,下述结论Ⅰ. B-A = B Ⅱ. A∩B = Ⅲ. B A中哪个(些)为真?A)只有Ⅰ B)只有Ⅱ C)只有Ⅲ D)Ⅰ和Ⅱ(11)设集合A={1,2},R = {|x,y A且x y<3},则R在A上是A)自反的,但不是对称的B)自反的,又是对称的C)对称的,但不是自反的D)不是自反的,也不是对称的(12)设F(x):x是人,G(x):x去过火星。
超市生鲜员工工作流程
超市生鲜员工工作流程超市的生鲜员工的主要工作流程有哪些。
超市的生鲜员工需要做好哪些具体的步骤。
小编给大家整理了关于超市生鲜员工工作流程,希望你们喜欢!超市生鲜员工每日工作流程1、到班确认生鲜员工每日工作流程一、每日 06:50-07:00 开店前准备(1)看交接班是否有昨日未完成事项。
(2)员工排班表到勤人员是否正常。
(3)检查总公司价格异动及卖场POP。
2、清洁检查清洁检查:每日开店前作陈列区域清洁检查与作业区卫生清洁,包括作业人员工作台、机械设备,库存库房是否符合卫生安全。
3、商品巡视(1)主管至收货区进行商品品质验收。
(2)销售商品品质,鲜度,陈列量检视,以期呈现卖场陈列商品新鲜。
(3)检视回收质量差之商品及到期商品,了解状况及时做出清处理。
(4)商品价格的确认。
(5)营业前10分钟完成开店准备。
二、06:50-12:001、库存区巡视(1)七点钟店长主持员工(包括驻场人员)班前会,并检查员工服仪是否整洁、规范。
(2)抽视库存区是否先进先出,库存单是否填写正确;商品是否堆放整齐。
(3)干货查验是否过期与分区整理,力求可以随时检点。
(4)库内商品鲜度及品质是否正常,且须放置在栈板或货架上。
(5)员工整理工作区及后仓。
2、卖场巡视(1)检视排面品质、陈列状况,了解顾客所需商品是否有售。
(2)指导员工、驻场工作习惯,并参与调整各工作站不足人力。
(3)商品销售情况。
(4)促销品销售回转率是否正常,(5)安排人员午餐。
(6)冷藏库、高柜温度是否正常。
三、13:30-15:301、销售分析(1)查阅前日到货明细是否与实际相符。
(2)促销商品计划,计划下期促销之端架计划。
(3)依据促销商品趋势分析,判断销售强度与陈列是否合理,及下单方式。
(4)查看每日业绩,毛利等是否达成目标并做大中小分类占比分析。
(5)异常管理(负毛利、负库存、滞销)。
2、二次开店(1)早班针对营业中待办未完成事项进行交接(含会议事项及营业中顾客意见之处理程序)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <unistd.h> #include <stdio.h> int main(void) {
pid_t pid; int count=0; pid=fork(); //if(pid==0) count++; printf("count=%d\n",count); return 0; }
共53页
20
例8-2,fork.c (演示)
共53页
21
pid=fork(); //创建进程 if(pid<0) {
printf("error in fork\n"); return 0; } else if(0==pid) //子进程 { while(1) {
printf("I am in the child process, ID is %d\n",getpid()); sleep(1); } return 0; } else //父进程 { while(1) { printf("I am in the parent process, ID is %d\n",getpid()); sleep(1); } return 0; }
vfork: 子进程与父进程共享数据段、堆栈。
2. fork: 父、子进程的执行次序不确定。 vfork:子进程先运行,父进程后运行。
共53页
28
vfork.c,程序的输出是?
#include <stdio.h> #include <unistd.h> int main(void) {
pid_t pid; int count=0; pid=vfork(); count++; printf("count= %d\n",count); exit(0); return 0; }
共53页
9
概念:进程调度
按一定算法,从一组待运行的进程(就绪) 中选出一个来占用CPU运行
调度方式
• 抢占式 • 非抢占式
共53页
10
调度算法
1. 先来先服务调度算法 2. 短进程优先调度算法 3. 高优先级优先调度算法 4. 时间片轮转法
• linux的优先级如何表示,请查资料
共53页
11
概念:死锁
共53页
例: fork2.c, 父进程和子 进程可以是 无限循环 (演示)
22
例:count.c, 进程创建-思考运行结果?
#include <unistd.h> #include <stdio.h> int main(void) {
pid_t pid; int count=0; pid=fork(); addr: count++; printf("count=%d\n",count); return 0; }
返回:如果执行成功则函数不会返回,执行失败则直接返回-1,失 败原因存于errno 中。(返回值参见下一页) main() { char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char *)0}; char * envp[ ]={“PATH=/bin”,0} execve(“/bin/ls”,argv,envp); }
24
输出:
count=1
count=1
count++被父进程、子进程一 共执行了两次,为什么count 的第二次输出不是2?
count
count
父进程 代码
fork()
子进程 代码
#include <unistd.h> #include <stdio.h> int main(void) {
pid_t pid; int count=0; pid=fork(); count++; printf("count=%d\n",count); return 0; }
• #include <stdlib.h> • char *getenv(const char *name);
共53页
16
共53页
17
例: 获取环境变量PATH,(演示)
共53页
18
1.3 创建进程
• Linux系统通过fork()系统调用创建一个进程,fork()函数定义如下:
• #include <sys/types.h> • #include <unistd.h> • pid_t fork(void);
execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char * )0); }
共53页
33
execlp(从PATH 环境变量中查找文件并执行)
int execlp(const char * file,const char * arg,……); • 函数说明:execlp()会从PATH 环境变量所指的目录中查找符合参数
共53页
25
fork()
子进程的数据空间、堆栈空间都会从 父进程得到一个拷贝,而不是共享。 在子进程中对count进行加1的操作,并 没有影响到父进程中的count值,父进 程中的count仍然为0.
共53页
26
vfork()
共53页
27
fork vs vfork
区别 1. fork: 子进程拷贝父进程的数据段、堆栈。
共53页
14
小结
共53页
15
1.2 进程环境和属性
• 大多数UNIX系统的main()函数定义如下:
• int main(int argc, char *argv[], char *envp[]);
• POSIX标准规定使用一个全局的环境变量environ取代了参数envp, 应用程序可以通过getenv()和putenv()函数读取或设定一个环境变 量。getenv()函数定义如下:
共53页
19
fork()
#include <unistd.h> pid_t fork(void) 功能:创建子进程。fork的奇妙之处在于它被调用 一次,却返回两次,它可能有三种不同的返回值。 1. 在父进程中,返回新创建的子进程的PID。 2. 在子进程中,返回0 3. 如果出现错误,返回一个负值
多个进程因竞争资源而形成一种僵局, 若无外力作用,这些进程将永远不能 再向前推进。
共53页
12
获取进程ID
• #include <sys/types.h> • #include <unistd.h>
pid_t getpid(void) 获取本进程ID。
pid_t getppid(void) 获取父进程ID。
• 举例:串口,打印机等
共53页
6
概念:临界资源
• 操作系统中将一次只允许一个进程使用的 资源成为临界资源。
共53页
7
概念:临界区
• 进程中访问临界资源的那段程序代码称为 临界区。为保证对临界资源的互斥访问, 应保证各进程互斥地进入各自的临界区。
共53页
8
概念:进程同步
一组并发进程按一定的顺序执行的过 程称为进程间的同步,具有同步关系 的一组进程称为合作进程,合作进程 间互相发送的信号称为消息或事件。
file的文件名,找到后便执行该文件,然后将第二个以后的参数当 做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL) 作结束。 • 返回值:如果执行成功则函数不会返回,执行失败则直接返回-1, 失败原因存于errno中。 例: #include<unistd.h> main() { execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0); }
共53页
32
execl(执行文件)(演示)
• int execl(const char * path,const char * arg,....); • 说明:execl()用来执行参数path字符串所代表的文件路径,接下
来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后 一个参数必须用空指针(NULL)作结束。 • 返回:如果执行成功则函数不会返回,执行失败则直接返回-1, 失败原因存于errno中。 •例 • #include<unistd.h> main() {
共53页
29
vfork2.c
共53页
30
小结
fork() vfork()
共53页
31
exec 函数族
exec用被执行的程序替换调用它的程序。 区别: fork创建一个新的进程,产生一个新的PID。 exec启动一个新程序,替代原有的进程,因此进程的PID不会改变。
execl() execlp() execv() execve() execvp()
共53页
13
getpid.c
#include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h>
int main(void) {
intf("pid = %d\n",getpid()); //get pid of the process printf("ppid= %d\n",getppid()); //get pid of the parent process }
共53页
35
execve(执行文件)