电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PDF文档下载
分享到微信 分享到微博 分享到QQ空间

计算机操作系统教程(机类本科)第8章

  • 资源ID:74527125       资源大小:199.17KB        全文页数:71页
  • 资源格式: PDF        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

计算机操作系统教程(机类本科)第8章

第八章 操作系统环境下的编程及应用 第八章 操作系统环境下的编程及应用 8.1 应用程序编程接口概述 应用程序编程接口概述 8.2 进程间通讯实现方法与实例进程间通讯实现方法与实例 8.3 线程编程及实现方法线程编程及实现方法 第八章 操作系统环境下的编程及应用 8.1 应用程序编程接口概述应用程序编程接口概述 应用程序编程接口(Application Programming Intertace, 简称 API)是由操作系统支持的函数定义、参数定义和消息 格式的集合。 应用程序可借助API函数处理系统提供的功能。 Windows API函数提供了Windows所支持的所有系统服务的 功能。 第八章 操作系统环境下的编程及应用 标准的Win32 API函数总体上可以分成七类, 分别为: (1) 窗口管理。 (2) 窗口通用控制。 (3) Shell特性。 (4) 图形设备接口。 (5) 系统服务。 (6) 国际特性。 (7) 网络服务。 第八章 操作系统环境下的编程及应用 8.2 进程间通讯实现方法与实例进程间通讯实现方法与实例 8.2.1 管道管道 了解管道的一个直观的例子是在命令中使用管道符,例如命 令: ls -1 | grep linux | more 就使用了两个管道符,grep的输入来自于ls的输出, 而grep的输 出又作为more命令的输入使用。该命令的含义是在当前目录中查 找名字中包含“linux”的目录或者文件,然后分屏显示。 管道可以分成两类:无名管道(简称管道)和FIFO(也称 为命名管道)。二者之间主要的区别在于无名管道只能用于父、 子进程之间的通讯, 而FIFO则可以用于任何进程之间的通讯。 第八章 操作系统环境下的编程及应用 1. 无名管道 无名管道 所有的UNIX系统都支持管道的通讯机制。 管道有两种限制: (1) 管道是半双工的, 数据只能单向流动; (2) 管道只能在父子进程之间使用。 管道由系统调用pipe( )产生, 该函数的语法为 int pipe(int fd2) 参数fd用来存放pipe( )创建的管道的句柄。 fd0用于读, fd 1用于写。 第八章 操作系统环境下的编程及应用 图8.1 父进程向子进程传递信息的管道 第八章 操作系统环境下的编程及应用 下面是一个使用管道实现子进程向父进程传递信息的例子: include include include int main(void) int fd2,nbytes; pid -t pid; char string =“Hello, world! n“; char readbuffer80; 第八章 操作系统环境下的编程及应用 pipe(fd); /*创建管道*/ if ( (pid = fork( ) = -1) /*创建子进程*/ perror(“fork“); exit(1); if (pid = 0) /*子进程*/ close(fd0); /*关闭管道读句柄*/ write(fd1,string,strlen(string); /*向管道中写入数据*/ -exit(0); 第八章 操作系统环境下的编程及应用 else/*父进程*/ close(fd1);/*关闭管道写句柄*/ nbytes = read(fd0,readbuffer,sizeof(readbuffer); /*从管道中读取数据*/ printf(“Received Strings: %sn“,readbuffer); return (0); 第八章 操作系统环境下的编程及应用 popen函数原型为 FILE *popen(const char *cmdstring, const char *type) 该函数首先创建一个管道,再执行fork创建一个子进程, 然后调用exec执行cmdstring指定的命令,并返回一个标准的文 件指针。 该文件指针根据type值进行定位:如果type是“r”, 则链接到cmdstring的标准输出上;如果type是“w”,则链接到 cmdstring的标准输入上。 第八章 操作系统环境下的编程及应用 下面的程序实现ls | more的功能: include int main(void) FILE *in -fp,*out -fp; char readbuffer80; if ( (in -fp = popen (“ls“,“r“) = NULL) ) perror(“popen“); exit(1); 第八章 操作系统环境下的编程及应用 if ( (out -fp = popen (“more“,“w“) = NULL) ) perror(“popen“); exit(1); while (fgets(readbuf, 80, in -fp) fputs(readbuf, out -fp); pclose(in -fp); pclose(out -fp); return (0); 第八章 操作系统环境下的编程及应用 2. FIFO 在系统shell中,我们可以使用下面的命令来创建命名管道: mknod FIFOname p mkfifo -m 0666 FIFOname 而在C语言中, 我们可以使用mknod函数或者makefifo函 数创建命名管道, 函数原型如下: int mknod( char *pathname, mode -t mode, dev -t dev ) int mkfifo( const char *pathname, mode -t mode ) 第八章 操作系统环境下的编程及应用 服务器端程序: FILE * in -file; char buffer80; in -file = fopen(“FIFOname“,“r“); if ( in -file = NULL ) perror(“fopen“); exit(1); fread(buffer, 1, 80, in -file); printf(“Data recieved from FIFO: %sn“, buffer); fclose(in -file); 第八章 操作系统环境下的编程及应用 客户端程序: FILE * out -file; char buffer80; out-file = fopen(“FIFOname“,“w“); if ( out-file = NULL ) perror(“fopen“); exit(1); sprintf(buffer,“Test data for named pipe!n“); fwrite(buffer, 1, 80, out -file); printf(“Data recieved from FIFO: %sn“, buffer); fclose(out-file); 第八章 操作系统环境下的编程及应用 命名管道只能用于同种文件系统中的进程之间的通讯,在 使用的过程中要注意其独立性问题,也就是说操作不能被其它 进程打断。一次独立操作可以传送的最大字节数在POSIX标准 中是在/usr/include/bits/posix1-lim.h中定义的: define -POSIX -PIPE -BUF 512 在Linux中,由/usr/include/linux/limits.h定义: define PIPE -BUF 4096 如果进行通讯的进程需要写入管道的数据超过这个限制, 就必须将其分割成几个独立的操作过程。 第八章 操作系统环境下的编程及应用 8.2.2 System V IPC机制机制 Unix System V中引入了三种新的IPC机制:消息队列 (Message Queue)、信号量(Semaphores)和共享内存 (Shared Memory)。这三种IPC机制有很多相似之处,你可 以使用ipcs命令来查看当前系统中这三种IPC的使用情况。 消息队列、 信号量和共享内存在系统中都有一个唯一的 标志符(标志符是一个非负、递增的数字,达到最大值时再 从0开始计数),内核根据这个标志符来区分这些IPC对象。 第八章 操作系统环境下的编程及应用 在程序中,我们需要使用关键字(key)来访问它们。 关键 字可以使用ftok系统调用来生成, 函数原型如下: key-t ftok( char *pathname, char proj ) 进行通讯的进程必须使用同一个关键字, 只要二者运 行的目录(由参数pathname指定)是相同的, 就可以保证 ftok产生的关键字相同。 第八章 操作系统环境下的编程及应用 ipc-perm结构的定义在linux/ipc.h中, 如下所示: struct ipc -perm - -kernel -key -t key; - -kernel -uid -t uid; - -kernel -gid -t gid; - -kernel -uid -t cuid; - -kernel -gid -t cgid; - -kernel -mode -t mode; unsigned short seq; 第八章 操作系统环境下的编程及应用 1. 消息队列 消息队列 消息队列把进程之间传递的消息(struct msg结构的数据) 以链表的形式组织在一起,进行通讯的写方进程经过权限认 定之后, 把需要传递的数据追加在队列的尾部,读方进程就 可以从该队列中读取需要的数据,从而实现多个进程之间的 通讯。 每个消息队列都有一个struct msqid -ds(在linux/msg.h 中定义)的结构和它相关,该结构反映消息队列的当前状态: 第八章 操作系统环境下的编程及应用 struct msqid -ds struct ipc -perm msg -perm; struct msg *msg -first;/* first message on queue,unused */ struct msg *msg -last;/* last message in queue,unused */ -kernel-time-t msg-stime; /* last msgsnd time */ -kernel-time-t msg-rtime; /* last msgrcv time */ -kernel-time-t msg-ctime; /* last change time */ unsigned long msg-lcbytes;/* Reuse junk fields for 32 bit */ unsigned long msg-lqbytes;/* ditto */ unsigned short msg-cbytes; /* current number of bytes on queue */ unsigned short msg-qnum; /* number of messages in queue */ unsigned short msg-qbytes; /* max number of bytes on queue */ -kernel-ipc-pid-t msg-lspid; /* pid of last msgsnd */ -kernel-ipc-pid-t msg-lrpid; /* last receive pid */ 第八章 操作系统环境下的编程及应用 和消息队列的使用有关的系统调用有三个:msgget、 msgsnd和msgrcv, 其函数原型如下: int msgget ( key -t key, int msgflg ) int ms

注意事项

本文(计算机操作系统教程(机类本科)第8章)为本站会员(luoxia****01803)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.