第7章 Linux环境编程 (5学时).ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:77 大小:1.7MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第7章 Linux环境编程 (5学时).ppt

第7章Linux环境编程(5学时).ppt

预览

免费试读已结束,剩余 67 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第7章Linux环境编程本章作业编译命令:makefile文件的内容:主要内容系统调用和库函数简介文件操作进程管理和同步进程通信内存管理7.1系统调用和库函数7.1.1系统调用操作系统和系统调用的关系在Linux系统中进程的两种运行模式:高优先级的内核模式、低优先级的用户模式。内核运行在高优先级;其它外围软件包括shell,编辑程序等都是在低优先级运行。之所以采取不同的执行模式主要原因是为了保护,由于用户进程在较低的特权级上运行,它们将不能意外或故意破坏其它进程或内核。用户进程如果要完成内核模式下才能执行的某些功能时,必须严格按照系统调用提供接口,才能进入内核模式,完成相应的功能。#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intopen(constchar*path,intoflags);系统调用可以看作是所有Linux进程共享的、在特权方式下运行子程序库,系统调用的主要功能是:使用户可以使用操作系统提供的有关设备管理、文件系统、进程控制、进程通讯、存储管理方面的功能,而不必要了解操作系统的内部结构、有关硬件的细节问题,从而减轻用户负担和保护系统以及提高资源利用率。7.1.2库函数库函数运行在用户空间库函数可以分为下面六大类:①文件管理:对文件、目录进行创建、删除等;②状态信息:对日期、时间、内存容量等信息的格式化和存储③文件修改:④程序设计语言的支持:⑤程序装入和执行:⑥通信:在进程、用户和不同计算机系统之间,进行信息传送7.1.3调用方式7.2文件操作例:#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intcreat(constchar*pathname,mode_tmode);#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>intopen(constchar*path,intoflags);intopen(constchar*path,intoflags,mode_tmode);7.2.2应用示例#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>intmain(void){intfd1,fd2,fd3,nbytes;charbuf[10];if((fd1=open(“fileexp.c",O_RDONLY))<0){perror("openfileexp.c");exit(EXIT_FAILURE);}if((fd2=open("/dev/null",O_WRONLY))<0){perror("open/dev/null");exit(EXIT_FAILURE);}if((fd3=open("/tmp/m1.c",O_CREAT|O_WRONLY))<0){perror("open/tmp/m1.c");close(fd1);close(fd2);exit(EXIT_FAILURE);}while((nbytes=read(fd1,buf,10))>0){if(write(fd2,buf,10)<0)perror("write/dev/null");if(write(fd3,buf,nbytes)<0)perror(“write/tmp/m1.c");write(STDOUT_FILENO,buf,10);}close(fd1);close(fd2);close(fd3);exit(EXIT_SUCCESS);}回顾第5章的内容:每个进程在创建时自动打开3个文件:标准输入、标准输出、标注错误输出,分别对应文件描述符0,1,2.在<unistd.h>中定义三个宏,STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO分别表示这些数字.进程控制块使用文件时的逻辑结构7.3进程控制7.3.1有关进程控制的系统调用操作系统可以对外提供服务,是通过两种不同的方式来实现:系统调用和库函数。例如:#include<unistd.h>#include<sys/types.h>pid_tfork(void);#include<unistd.h>#include<sys/types.h>pid_tgetpid(void);pid_tgetppid(v