C语言第4讲C语言编程三结构
- 格式:pdf
- 大小:346.09 KB
- 文档页数:4


iTlIiI 入门阶梯
0l01010l01Ol01c)1OlD】O10101Ol01。10l01Ol0101Ol01c)1【)l01010lD】O101010101010l0l010l0l010l01c)1Ol0l010l0 r_}] :
进程的等待 当一个进程结束时,会产生一个中止状态字,然后内核 发出一个sigchld信号通知父进程。关于其函数的调用: 口id t (im*statle ̄) pid d髓ltpJd(pid t pl出int*stati ̄.ink optice,s) 正确返回:进程【D: 错误:一1:其他:0 调用后可能产生三种情况: 1.如果所有子进程部还在运行,进程挂起: 2.若干进程结束,立即得到谊终止状态字并返回; 3.若谊进程没有子进程,立即返回错误代码, 其中waitpid函数中pid参数的含意: <一l等待进程组ID等于pid的绝对值的子进程 一1等待任何子进程。相当于wait函数 0 等待进程组ID与父进程组ID相同的子进程 >0 等待进程ID等于pid的子进程  ̄aitpid函数对wait函数的增进(options参数控制): 1. ̄raitpid能够等待某个特定的进程 2.waitpid提供wait的一种不挂起的模式 3.waitpid支持作业控制 4.4exec函数舟绍: 当一个进程调用exec函数执行另一个程序后,这个进 程就完全被新程序代替,进程标识号是不改变的。使用fork 函数可以创建进程,ex ec函数可以初始他新程序。 exec函数的六种基本形式如下: int exe ̄l(crest m .Oonst c}laI gO… (char*) n int㈣(const ebb*pathna ̄e.cha consc argv口) int execle(const ch日T’ athna e,c0nst cF ̄r*argO,. char )0, ehar*e ̄st on'Of 2 ) int ec 叽 却 鹄d d甜ar 1]_ np咖s七euvp口) int exeel ̄ ̄onst chin'*f 2le rmⅡ ,c0nst cha一盯 .. har )(H ) 文/王渊 int execvp 0nSt ehar*fil自la腿.char ̄const argyl1) 正确返回:一I 错误返回:0 e x e c调用后,进程标识号并不改变.除此之外,还 有以下属性是新程序从父进程那里继承来的。 1父进程ID 2真实的用户ID和组rD 3.进程组ID 4.SBSs【删ID 5.控制终端 6根目录与当前工作目录 7文件缺省创建掩码 8其他资源分配 9进程的时间记录 应该注意到真实的用户ID和组ID在ex ̄(2调用中一直是 一致的,但有效的的用户ID,和组ID就不一定了。他们是否 改变,取决于所执行程序的set user ID和set ̄voup ID的状 态,如果setuser ID被设置了,那么有效的用户ID就可能 改变,他将与程序所有者ID相同,否则,有效的用户ID就不 改变,有效的组I D设置情况与此相同。 结束进程 有三种正常结束进程的方法,两种异常中止的方法。 正常结束: 1.在main函敷中调用return,这相当于调用exit。 2调用exit函数。 3调用一。dt函数。exit被ilxlt调用.关闭一些linu ̄ 特有的推出句柄。 异常中止: 1调用ab0rt,产生一十si ̄lrrt信号。 2.进程收到特定信号,此信号可以采由内槭或者进程。 exit和一exit函数调用的格式: void exit(int status} void exit(int status)
1 实验四 Linux下的C语言编程
实验类别:设计型 实验时数:6学时
开课单位:计算机学院计算机科学与技术系 实验地点:健翔校区计算中心
一、实验目的
通过本实验练习,使学生掌握有关文件管理与文件操作的内容。首先要熟悉在LINUX系统下文件系统的构建方法;其次要熟练掌握在LINUX环境下用C语言进行高级编程的方法(即有关文件操作的系统调用的使用),进而充分了解LINUX文件系统中shell命令的实现原理以及它们用到的系统调用。
二、实验环境
操作系统:任何Unix/Linux及Sun Solaris 或 windows 系列
应用系统:gcc编译器。若OS为windows系列,则还需相应的模拟环境
三、预备知识
1、 关于系统调用和库函数
C语言支持一系列的库函数的调用,其中最基本的是studio库函数。事实上,库函数只是C语言在较高层次上调用的方式,系统调用是更低层次的与C语言的界面,是内核提供给用户调用的函数。
2、 LINUX环境下系统调用和库函数的异同
⑴C程序使用系统调用的语句和调用库函数的语句形式完全相同,但是二者运行的环境和运行机制截然不同。
⑵从运行环境来看,库函数使用依赖于所运行的用户环境,程序调用库函数时,它运行的目标代码是属于程序的,程序处于“用户态”执行;而系统调用的使用不依赖于它运行的用户环境,是LINUX内核提供 2 的低层服务,系统调用时所执行的代码是属于内核的,程序处于“核心态”执行。
⑶程序库函数的调用最终还是要通过LINUX系统调用来实现,库函数一般执行一条指令,该指令(操作系统陷阱operating system trap)将进程执行方式变为核心态,然后使内核为系统调用执行代码。
四、实验内容
本实验要求在LINUX/UNIX环境下用C语言编写三个具体的SHELL命令,基本涉及了LINUX/UNIX文件系统中较为常用的有关文件操作的系统调用。内容如下:
个人收集整理-ZQ
标识符是指我们为变量、宏,函数等等取地名字.
一、语言变量地命名长度限制
规定,编译器至少应该能够处理 个字符(包括 )以内地内部标识符( );
而对于外部标识符( ),编译器至少应该能够处理 个字符(包括 )以内地外部标识符.
例如 ; 这个语句中地 就是一个标识符.
最新地 标准规定,编译器至少应该能够处理 个字符(包括 )以内地内部标识符;编译器至少应该能够处理 个字符(包括 )以内地外部标识符.
事实上,我们可以使用超出最大数目限制地字符来命名标识符,不过编译器会忽略超出地那部分字符.也就是说,如果我们用 个字符来命名变量,而那个编译器最多只能处理 个字符地变量名地话,那么多出地那 个字符就会被编译器忽略,只有前面地 个字符有效.
有些古老地编译器只能处理 个字符以内地标识符,对于这样地编译器来说,标识符 和 是等价地,因为它们前面 个字符相等.
二、语言变量地命名可用字符和组合规则
标准规定标识符只能由大小写英文字母,下划线(),以及数字组成.
标识符地第一个字符必须是大小写英文字母或者下划线,而不能是数字.
操作系统和 语言标准库里地标识符一般约定俗成以下划线开头,应避免用下划线作为我们自己定义地标识符地开头.
语言是大小写敏感地语言,也就是说,、、, 和 等都是相互不同地标识符.
不能用关键字和保留标识符来给我们自定义地变量命名.
合法命名非法命名
$]** * $、] 和 * 都是非法字符 *
* 不能以数字开头 *
* 是非法字符 *
* 不能有空格 *
' * ' 是非法字符 *
第4章 选择结构程序设计
【题4 .1】什么是关系运算?什么是逻辑运算?逻辑运算符与关系运算符优先级排序?
答:关系运算:即比较运算,由关系表达式完成。关系表达式是用关系运算符将两个数值或表达式连接起来的式子。关系运算符包括大于(>)、小于(<)、等于(= =)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。
逻辑运算:是指对因果关系进行分析的一种运算。逻辑运算的结果并不表示数值大小,而是表示一种逻辑概念,若成立用真或1表示,若不成立用假或0表示。逻辑运算符包括非运算(!),与运算(&&),或运算(||)。
逻辑运算符和关系运算符的优先级排序:
(1) 逻辑运算符!最高, 其次为关系运算符 ,逻辑运算符 &&和|| 最低
(2) 关系运算符中: <,<=,>,>=的优先级相同,且高于==和!=,而==和!=的优先级相同
【题4 .2】条件表达式的形式?输入两个数,求最大值?(用条件表达式实现)
x=?:
a=1,b=2,c=3,d=4,则条件表达式a>b?a:c>d?c:d的值为:4
【题4 .3】break语句的作用及如何使用?
作用:1.用于switch语句中,从中途退出switch语句。
2.用于循环语句中,从循环体内直接退出当前循环。
使用:switch(表达式)
{ case常量表达式1: 语句1;break;
case常量表达式2: 语句2;break;
…
case常量表达式n: 语句n;break;
default:语句n+1;
}
【题4 .4】求下面表达式的值。设a=1,b=2,c=3。
⑴ (!a==1)&&(!b==0)&&(!c==0) 答:原式=0