get程序的结构-Dr.KeShi.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
get程序的结构-Dr.KeShi.ppt

实验三 Linux进程及信号灯;三、内容 1、熟悉Linux进程接口; 2、了解Linux信号灯的编程; 3、了解Linux共享内存的使用; 3、编程模拟实现誊抄; 创建三个誊抄进程; 基于共享内存建立缓冲区; 创建同步信号灯; 对各誊抄进程施加P、V操作。 ;四、预备知识 1、Linux进程基本接口 进程创建:新进程是调用fork( )父进程的副本,称为子进程。子进程继承了父进程的许多特性,具有与父进程完全相同的用户级上下文,父进程与子进程并发执行。 接口:int fork( ) 0:父进程返回,子进程的PID; =0:子进程返回; -1:创建失败。;加载程序 :exec( )系列 exec( )系列可以将一个可执行的二进制文件覆盖在进程的用户级上下文的存储空间上,即把一个新程序装入内存,来改变调用进程的执行代码。如果exec( )调用成功,进程从新程序的入口开始执行。 exec( )系列系统调用在unistd.h中,共有execl、execlp、execle、execv、execvp五个,其基本功能相同,只是以不同的方式来给出参数。 一种是直接给出参数的指针,如: int execl(path,arg0[,arg1,...argn],0); char *path,*arg0,*arg1,...,*argn; 另一种是给出指向参数表的指针,如: int execv(path,argv); char *path,*argv[ ];;wait、exec联合使用的示例: int status; int pid; pid = fork( ); if (pid= =0) { ...........; /*执行命令ls -l -color */ execl(/bin/ls,ls,-1,-color,NULL); ...........; } wait(status); ;等待子进程结束wait 如果子进程没有完成,父进程一直等待。wait( )将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait( )前已有子进程暂停或终止,则调用进程做适当处理后便返回。 int wait(status)  int *status; 其中,status是用户空间的地址。它的低8位反应子进程状态,为0表示子进程正常结束,非0则表示出现了各种各样的问题;高8位则带回了exit( )的返回值。exit( )返回值由系统给出。 ;进程终止exit 系统调用格式:    void exit(status)    int status; 其中,status是返回给父进程的一个整数,以备查询。 为了及时回收进程所占用的资源并减少父进程的干预,UNIX/LINUX利用exit( )来实现进程的自我终止,exit(0)表示进程正常终止,exit(1)表示进程运行有错,异常终止。 如果调用进程在执行exit( )时,其父进程正在等待它的终止,则父进程可立即得到其返回的整数。 ;2、Linux共享内存 共享存储区是UNIX系统中通信速度最高的一种通信机制。该机制可使若干进程共享主存中的某一个区域,且使该区域出现(映射)在多个进程的虚地址空间中。 进程A的映像 内存 进程B的映像 ;创建、获得一个共享存储区shmget 系统调用格式: int shmget(key,size,flag); key_t key; //key是共享存储区的名字 int size, //size是其大小(以字节计); int flag;//flag是用户设置的标志,如IPC_CREAT。IPC_CREAT表示若系统中尚无指名的共享存储区,则由核心建立一个共享存储区;若系统中已有共享存储区,便忽略IPC_CREAT。该函数使用头文件如下: #includesys/types.h #includesys/ipc.h #includesys/shm.h;共享存储区的附接shmat 从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。 系统调用格式: virtaddr=shmat(shmid,addr,flag) 参数定义 char *shmat(shmid,addr,flag); int shmid,flag; char * addr; 其中,shmid是共享存储区的标识符;addr是用户给定的,将共享存储区附接到进程的虚地址空间;flag为0时,表示可读、可写;返回值是共享存储区所附接到的进程虚地址viraddr ;共享存储

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档